0

我有如下的对象数组

阵列 1:

[{id: 1, name: 'Golden', isEdited: true}, {id: 2, name: 'Pearl'}]

阵列 2:

[{id: 1, name: 'Golden'}, {id: 2, name: 'Pearlblue'}, , {id: 3, name: 'Orange'}]

现在我想合并这两个数组,如果对象包含 isEdited 标志意味着不应该更新该对象。

预期结果应该是

[{id: 1, name: 'Golden', isEdited: true}, {id: 2, name: 'Pearlblue'}, {id: 3, name: 'Orange'}]

我尝试过以下方法

b.map((battr) => {
 return {
   ...a[battr.id],
   ...battr
 }
})

但它返回输出为

[{id: 1, name: 'Golden'}, {id: 2, name: 'Pearlblue'}, {id: 3, name: 'Orange'}]
4

1 回答 1

0

请注意,您id的 s 与您的数组索引不匹配。因此,在您的尝试中a[battr.id]应该替换为类似a.find(a => a.id === battr.id)

您的示例令人困惑,因为在两个数组中,id=1 的名称都是“Golden”,但假设您只需要数组 A 中的属性(如果 isEdited=true),您的解决方案可能是:

b.map((b_attr) => {
  var matchingA = a.find(a_attr => a_attr.id === b_attr.id);
  if (matchingA && matchingA.isEdited)
    return matchingA;
  else
    return { ...matchingA, ...b_attr }
})
于 2020-11-27T13:53:28.713 回答