如何比较并获取两个对象数组的值?

时间:2018-07-04 07:15:49

标签: javascript angular typescript

我有两个对象数组,如下所示。

对象1的数组----> [{locationId:1,locationName:"Bangalore"},{locationId:2, locationName:"Mumbai"}]
对象2的数组-----> [{baseId:1,baseUnit:"abc"},{baseId:2,baseUnit:""}]

有没有一种简短的方法,我可以使用第2个数组中的baseId从第一个数组中定位位置,并将其推送到角度为6的新对象数组中。我不想使用for循环。

3 个答案:

答案 0 :(得分:1)

var a = [{locationId:1,locationName:"Bangalore"},{locationId:2, locationName:"Mumbai"}];
    var b = [{baseId:1,baseUnit:"abc"},{baseId:2,baseUnit:""}]
    var c = [];

a.map(obj => {
  b.map(res => {
    if (obj.locationId == res.baseId) {
      c.push({
        "locationName": obj.locationName,
        "baseUnit": res.baseUnit
      });
    }
  });
});


console.log(c);

答案 1 :(得分:1)

以下代码应满足您的要求(代码中的注释)

// Go throught first array
newArray = array1.map(location => {
    // Look for corresponding object in second array based on Ids
    const foundBase = array2.find(base => base.baseId === location.locationId);
    // If the object is found, return combined object
    if(foundBase){
        return Object.assign(location, foundBase);
    }
});

答案 2 :(得分:1)

减少数组

在这里您可以看到可以在.reduce上使用Array来遍历数组,同时生成一个新数组:

let array1 = [{locationId:1,locationName:"Bangalore"},{locationId:2, locationName:"Mumbai"}]
let array2 = [{baseId:1,baseUnit:"abc"},{baseId:2,baseUnit:""}]

// Combine objects in array
array1.reduce((newArray, _, index) => newArray.concat({...array1[index], ...array2[index]}), [])