使用相同的键将属性从一个数组添加到另一个数组(javascript)

时间:2018-10-05 15:29:53

标签: javascript arrays

你好,我没有用语言解释它,我在下面做了一个快速的视觉表示。

说我有以下数组:

let arr1 = [
  {
    id: 1,
    someKey: someValue
  },
  {
    id: 2,
    someKey: someValue
  },
]

和另一个数组:

let arr2 = [
  {
    id: 1,
    numberOfItems: 10
  },
  {
    id: 2,
    numberOfItems: 20
  },
]

如何创建以下数组?

let result = [
  {
    id: 1,
    someKey: someValue,
    numberOfItems: 10
  },
  {
    id: 2,
    someKey: someValue,
    numberOfItems: 10
  },
]

如您所见,两个数组都具有相同的id值。我想从第二个数组中提取numberOfItems: 10并将其放入具有相同ID的第一个数组中。

注意:这两个ID完全不同,具有不同的属性和长度。唯一的相似之处是id

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以先创建一个以id为键的地图,然后合并对象,这将解决O(n)中的问题:

let arr1 = [
  {
    id: 1,
    someKey: 3
  },
  {
    id: 2,
    someKey: 6
  },
];

let arr2 = [
  {
    id: 1,
    numberOfItems: 10
  },
  {
    id: 2,
    numberOfItems: 20
  },
];

let arr2Map = arr2.reduce((acc, curr) => {
  acc[curr.id] = curr
  return acc;
}, {});
let combined = arr1.map(d => Object.assign(d, arr2Map[d.id]));
console.log(combined);

答案 1 :(得分:0)

let arr1 = [
  {
    id: 1,
    someKey: 3
  },
  {
    id: 2,
    someKey: 6
  },
];

let arr2 = [
  {
    id: 1,
    numberOfItems: 10
  },
  {
    id: 2,
    numberOfItems: 20
  },
];

let idToNumberOfItem = {};
arr2.forEach(({id, numberOfItems})=> idToNumberOfItem[id]=numberOfItems)

arr1.forEach((item)=> item['numberOfItems'] =  idToNumberOfItem[item.id])

console.log(arr1);