仅将1个列表中的2个对象数组合并

时间:2018-10-23 17:33:59

标签: javascript arrays node.js

让我们看一个例子:

var arr1 = new Array({name: "lang", value: "German", carId: 1}. {name: "lang", value: "German", carId: 3});

我需要合并这两个数组,并将该carId转换为具有这些值的列表:

({name: "lang", value: "German", carId: [1,3]});

2 个答案:

答案 0 :(得分:0)

这是代码

var arr1 = new Array({ name: "lang", value: "German", carId: 1 });
var arr2 = new Array({ name: "lang", value: "German", carId: 3 });

const result = arr1.map((o) => {
    let item

    arr2.forEach(
        (o2) => {
            if (o2.name === o.name && o2.value === o.value) {
                item = { name: o.name, value: o.value, carId: [o.carId, o2.carId] }
            }
        }
    )

    return item
}).filter(item => item)

使用的方法(可能会引起混淆):

答案 1 :(得分:0)

    var arr1 = new Array({name: "lang", value: "German", carId: 1});
    var arr2 = new Array({name: "lang", value: "German", carId: 3});

    var mergedArray = arr1.concat(arr2); //merged the two arrays
    var cardIds = {}; // to collect the cardsIds for same name and value

    // collect the cardsIds for same name and value
    mergedArray.map((item) => {
     var key = item.name + '_' + item.value
     cardIds[key] = cardIds[key]? {...cardIds[key], item.carId}: [item.carId]
    })

    // Get unique element from merged array by name and value
    var result = _.uniqBy(mergedArray, (o) => {return o.name && o.value});

    // get the result with name, value and their cards in the array.
    result = result.map((item) => {
     var key = item.name + '_' + item.value
     item.cardId = cardIds[key]
     return item
    })