如何将两个数组与对象进行比较?

Mor*_*ton 0 javascript

我将 id 与两个带有对象的数组进行比较。

这是我的功能:

array1 = [
{ id: 1 },
{ id: 2 },
{ id: 3 }
];

array2 = [
{ id: 1 },
{ id: 2 },
{ id: 3 }
];

const compareFunction = (array1, array2) => {
  array2.map((allValue) => {
    array1.map((value) => {
      allValue.selected = value.id === allValue.id;
    });
  })

 return array2;
}
Run Code Online (Sandbox Code Playgroud)

我想我会得到array2喜欢的

[{ id: 1, selected: true }, { id: 2, selected: true },{ id: 3, selected: true }]
Run Code Online (Sandbox Code Playgroud)

但实际上array2成为

[{ id: 1, selected: false }, { id: 2, selected: false },{ id: 3, selected: true }]
Run Code Online (Sandbox Code Playgroud)

只有最后一个选择的数组参数变为真。

哪一步错了?谢谢。

Ori*_*ori 6

将第二个数组转换为一组id值。用 a 迭代第一个数组Array.map()并通过扩展当前对象并添加selected值为每个项目创建一个新对象。要获取selected值,请检查 Set 是否包含当前项目id

const array1 = [{ id: 1 },{ id: 2 },{ id: 3 }];
const array2 = [{ id: 1 },{ id: 2 },{ id: 3 }];

const a2Set = new Set(array2.map(o => o.id))

const result = array1.map(o => ({ ...o, selected: a2Set.has(o.id) }))

console.log(result)
Run Code Online (Sandbox Code Playgroud)