0

I have two arrays and I want to merge the values of the two arrays into a single array, but both arrays have different values.

Example:

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" }
           ];

I tried this it, will work fine when data1 is unique, but the problem is when data1 is repeating it merges the first value:

var data = _.map(arr1, function(item){
                return _.extend(item, _.findWhere(arr2, { dataid: item.dataid }));
           });
  • do you want to merge by index or by `data1`? if by the last, how do you distinguish between same values? – Nina Scholz May 23 '19 at 06:43
  • 1
    Possible duplicate of [Combine same-index objects of two arrays](https://stackoverflow.com/questions/34076624/combine-same-index-objects-of-two-arrays) and [How to merge each object within arrays by index?](https://stackoverflow.com/questions/50919164) – adiga May 23 '19 at 06:44
  • Note to author: You have some syntax errors in your first snippet. – ProgrammerPer May 23 '19 at 06:53
  • I fixed typo error and it was solved by issue by @Maheer Ali – Shubham Seth May 23 '19 at 07:02

1 Answers1

1

You can use map() and merge the properties of first and second array on same index.

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)
Maheer Ali
  • 35,834
  • 5
  • 42
  • 73