Merge 2 arrays of objects
If you want to merge 2 arrays of objects in JavaScript. You can use this one line trick
Array.prototype.push.apply(arr1,arr2);
For Example
var arr1 = [{name: "lang", value: "English"},{name: "age", value: "18"}];var arr2 = [{name : "childs", value: '5'}, {name: "lang", value: "German"}];Array.prototype.push.apply(arr1,arr2); console.log(arr1); // final merged result will be in arr1
Output:
[{"name":"lang","value":"English"},{"name":"age","value":"18"},{"name":"childs","value":"5"},{"name":"lang","value":"German"}]
With ES6 you can do it very easy as below:
var arr1 = new Array({name: "lang", value: "German"}, {name: "age", value: "18"});var arr2 = new Array({name : "childs", value: '5'}, {name: "lang", value: "German"});var arr3 = [...arr1, ...arr2];
Output:
arr3 = [ {"name":"lang","value":"German"}, {"name":"age","value":"18"}, {"name":"childs","value":"5"}, {"name":"lang","value":"German"} ]
For those who are experimenting with modern things:
var odd = [{ name: "1", arr: "in odd" }, { name: "3", arr: "in odd" }];var even = [{ name: "1", arr: "in even" }, { name: "2", arr: "in even" }, { name: "4", arr: "in even" }];// ----// ES5 using Array.filter and Array.findfunction merge(a, b, prop) { var reduced = a.filter(function(aitem) { return !b.find(function(bitem) { return aitem[prop] === bitem[prop]; }); }); return reduced.concat(b);}console.log("ES5", merge(odd, even, "name"));// ----// ES6 arrow functionsfunction merge(a, b, prop) { var reduced = a.filter(aitem => !b.find(bitem => aitem[prop] === bitem[prop])) return reduced.concat(b);}console.log("ES6", merge(odd, even, "name"));// ----// ES6 one-linervar merge = (a, b, p) => a.filter(aa => !b.find(bb => aa[p] === bb[p])).concat(b);console.log("ES6 one-liner", merge(odd, even, "name"));// Results// ( stuff in the "b" array replaces things in the "a" array )// [// {// "name": "3",// "arr": "in odd"// },// {// "name": "1",// "arr": "in even"// },// {// "name": "2",// "arr": "in even"// },// {// "name": "4",// "arr": "in even"// }// ]