我有两个对象数组,如下所示:
otherId: {
type: Sequelize.TEXT,
allowNull: false,
defaultValue: Sequelize.col('_id')
}
新数组必须包括a2项
-如果a2和a1的项具有相同的ID (1,2,3,...)
-else,a1的项目
数组的顺序应与商品ID的顺序一致。
预期结果:
a1 = [
{id:1, name:"parent 1"},
{id:3, name:"parent 3"},
{id:4, name:"parent 4"},
{id:5, name:"parent 5"},
{id:6, name:"parent 6"}
];
a2 = [
{id:1, name:"parent 1"},
{id:2, name:"parent 2"},
{id:5, name:"parent 5"}
];
答案 0 :(得分:2)
如果我理解正确,那么您需要a1
的更新版本,其中的新元素来自a2
。一种解决方法是将a2
中a1
尚未在ids
数组中的所有a2
元素串联起来,为此我们使用filter()在a1
上。然后,您可以使用sort()获得最终结果。
a1 = [
{id:1, name:"parent 1"},
{id:3, name:"parent 3"},
{id:4, name:"parent 4"},
{id:5, name:"parent 5"},
{id:6, name:"parent 6"}
];
a2 = [
{id:1, name:"parent 1 Updated"},
{id:2, name:"parent 2 New"},
{id:5, name:"parent 5 Updated"}
];
let res = a2.concat(
a1.filter(x => !a2.find(y => y.id === x.id))
)
.sort((a, b) => a.id - b.id);
console.log(res);
答案 1 :(得分:0)
尝试根据每个数组的大小进行for循环
for (i = 0; i < a1.length; i++) {
if(a1[i] != null && a2[i] != null && a1[i][id]==a2[i][id])
{
a3.push(a1[i]);
}
}
答案 2 :(得分:0)
您可以使用reduce
和Object.values
const a1=[{id:1,name:"parent 1"},{id:3,name:"parent 3"},{id:4,name:"parent 4"},{id:5,name:"parent 5"},{id:6,name:"parent 6"}],
a2=[{id:1,name:"parent 1"},{id:2,name:"parent 2"},{id:5,name:"parent 5"}];
const a1map = a1.reduce((r,a) => (r[a.id] = a, r), {}),
a2map = a2.reduce((r,a) => (r[a.id] = a, r), {}),
merged = {...a1map, ...a2map};
const output = Object.values(merged)
console.log(output)
使用id
作为键创建一个累加器,并将数组中的每个对象作为其值。然后合并它们。如果id
和a1map
中都存在a2map
,则a2
的值将替换a1
的值。