比较具有不同数量属性的两个数组,并使用 javascript 在条件下将第三个数组与比较值映射
compare two arrays having different number of properties and mapping a third array with compared values on condition using javascript
我有 2 个数组
var array1 = ["1", "2", "3", "4", "5", "6"]
和
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offid: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
]
我需要将两个数组与 offId 的值进行比较,结果数组应该是
var array3 = [
{ offId: "1", offname: "one" },
{ offId: "2", offname: "" },
{ offId: "3", offname: "three" },
{ offId: "4", offname: "four" },
{ offId: "5", offname: "" },
{ offId: "6", offname: "" },
]
我如何实现这个(数组的长度可能相同或不同)
最简单的方法是 filter()
第二个数组:
const array3 = array2.filter(v => array1.includes(v.offId));
这将遍历 array2
中的每个元素,只留下 array1
中具有 offId
的元素。
如果您需要对其进行排序,则只需在其末尾添加一个排序即可:
const array3 = array2.filter(v => array1.includes(v.offId))
.sort((a, b) => b.offId > a.offId ? 1 : a.offId < b.offId ? -1 : 0);
如果您需要按数字对其进行排序(即,您希望 2 在 10 之前),那么您需要转换这些值,然后您可以减去它们:
const array3 = array2.filter(v => array1.includes(v.offId))
.sort((a, b) => parseInt(b.offId) - parseInt(a.offId));
您可以 Map
并使用存储的对象或新对象。
var array1 = ["1", "2", "3", "4", "5", "6"],
array2 = [{ offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }],
map = array2.reduce((m, o) => m.set(o.offId, o), new Map),
result = array1.map(offId => map.get(offId) || { offId, offname: '' });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var array1 = ["1", "2", "3", "4", "5", "6"];
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offId: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
];
var array3 = array1.map(val => array2.filter(obj => obj.offId == val)[0] || { offId: val, offname: "" });
console.log(array3);
您可以使用 Array.reduce
从 array1
和 array2
创建 array3
。
步骤如下:
acc
(累积数组)最初将包含空数组。
- 使用
Array.find
检查curr
(当前变量)是否在数组2中。
如果 a.offId
匹配 curr
值,Array.find
将 return 对象。
- 如果找到
obj
,将obj
压入acc
(累加数组)
- 否则将
{offId: curr, offname: ''}
推入数组
var array1 = ["1", "2", "3", "4", "5", "6"]
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offId: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
]
var array3 = array1.reduce((acc, curr) => {
var obj = array2.find(a => a.offId === curr);
if (obj) {
acc.push(obj);
} else {
acc.push({ offId: curr, offname: ""});
}
return acc;
}, []);
console.log(array3);
我有 2 个数组
var array1 = ["1", "2", "3", "4", "5", "6"]
和
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offid: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
]
我需要将两个数组与 offId 的值进行比较,结果数组应该是
var array3 = [
{ offId: "1", offname: "one" },
{ offId: "2", offname: "" },
{ offId: "3", offname: "three" },
{ offId: "4", offname: "four" },
{ offId: "5", offname: "" },
{ offId: "6", offname: "" },
]
我如何实现这个(数组的长度可能相同或不同)
最简单的方法是 filter()
第二个数组:
const array3 = array2.filter(v => array1.includes(v.offId));
这将遍历 array2
中的每个元素,只留下 array1
中具有 offId
的元素。
如果您需要对其进行排序,则只需在其末尾添加一个排序即可:
const array3 = array2.filter(v => array1.includes(v.offId))
.sort((a, b) => b.offId > a.offId ? 1 : a.offId < b.offId ? -1 : 0);
如果您需要按数字对其进行排序(即,您希望 2 在 10 之前),那么您需要转换这些值,然后您可以减去它们:
const array3 = array2.filter(v => array1.includes(v.offId))
.sort((a, b) => parseInt(b.offId) - parseInt(a.offId));
您可以 Map
并使用存储的对象或新对象。
var array1 = ["1", "2", "3", "4", "5", "6"],
array2 = [{ offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }],
map = array2.reduce((m, o) => m.set(o.offId, o), new Map),
result = array1.map(offId => map.get(offId) || { offId, offname: '' });
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
var array1 = ["1", "2", "3", "4", "5", "6"];
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offId: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
];
var array3 = array1.map(val => array2.filter(obj => obj.offId == val)[0] || { offId: val, offname: "" });
console.log(array3);
您可以使用 Array.reduce
从 array1
和 array2
创建 array3
。
步骤如下:
acc
(累积数组)最初将包含空数组。- 使用
Array.find
检查curr
(当前变量)是否在数组2中。
如果 Array.find
将 return 对象。- 如果找到
obj
,将obj
压入acc
(累加数组) - 否则将
{offId: curr, offname: ''}
推入数组
a.offId
匹配 curr
值,var array1 = ["1", "2", "3", "4", "5", "6"]
var array2 = [
{ offId: "4", offname: "four" },
{ offId: "9", offname: "nine" },
{ offId: "15", offname: "fifteen" },
{ offId: "3", offname: "three" },
{ offId: "1", offname: "one" },
{ offId: "0", offname: "zero" },
{ offId: "8", offname: "eight" },
{ offId: "10", offname: "ten" },
]
var array3 = array1.reduce((acc, curr) => {
var obj = array2.find(a => a.offId === curr);
if (obj) {
acc.push(obj);
} else {
acc.push({ offId: curr, offname: ""});
}
return acc;
}, []);
console.log(array3);