Давайте посмотрим на пример:

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

Мне нужно объединить эти два массива и преобразовать этот carId в список с этими значениями:

({name: "lang", value: "German", carId: [1,3]});
0
Damian Gonzalez 23 Окт 2018 в 20:33

2 ответа

Лучший ответ

Вот код

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)

Используемые методы (которые могут сбивать с толку):

0
Nurbol Alpysbayev 23 Окт 2018 в 17:48
    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
    })
0
Ankush Sharma 23 Окт 2018 в 18:01
52954821