Объединить два массива по значению индекса по другому значению в массиве
У меня есть два массива, и я хочу объединить значения двух массивов в один массив, но оба массива имеют разные значения.
Пример:
var arr1 = [
{ data1: 1 ,data2: "value1"},
{ data1: 1 ,data2: "value2"},
{ data1: 2, data2: "value3"},
{ data1: 3 ,data2: "value3"},
{ data1: 3 ,data2: "value3"}
];
var arr2 = [
{ data1:1, data3:"val1"},
{ data1: 1, data3: "val2"},
{ data1: 2, data3: "val1"},
{ data1: 3, data3: "val1"},
{ data1: 3, data3: "val2"}
];
var arr3 = [
{ data1:1, data2: "value1", data3:"val1"},
{ data1: 1, data2: "value2", data3: "val2"},
{ data1: 2, data2: "value3", data3: "val1"},
{ data1: 3, data2: "value3", data3: "val1" },
{ data1: 3, data2: "value3", data3: "val2" }
];
Я попробовал это, он будет работать нормально, когда data1 уникален, но проблема в том, что когда data1 повторяется, он объединяет первое значение:
var data = _.map(arr1, function(item){
return _.extend(item, _.findWhere(arr2, { dataid: item.dataid }));
});
1 ответ
Ты можешь использовать map()
и объединить свойства первого и второго массива по одному индексу.
var arr1 = [ { data1: 1 ,data2: "value1"}, { data1: 1 ,data2: "value2"},{ data1: 2, data2: "value3"}, { data1: 3 ,data2: "value3"}, { data1: 3 ,data2: "value3"} ];
var arr2 = [ { data1:1, data3:"val1"}, { data1: 1, data3: "val2"}, { data1: 2, data3: "val1"}, { data1: 3, data3: "val1"}, { data1: 3, data3: "val2"} ];
const res = arr1.map((x,i) => ({...x,...arr2[i]}));
console.log(res)