I have two array object(arrayList1,arrayList2). Just I am trying to merge those two arrays into one array object. The following terms I used.
- Both array merged into one array based on key-name is type.
- arrayList2 values will be overwrite the arrayList1.
- I Got the expected output but I am worying to do with efficient and performance way..
Can someone please simplify my code..
Note :
- It would be great if using Array.reduce function and without use any plugin/library..
- I added the smaple input for understanding. The element order will be change and size of both array's will change.
const arrayList1 = [
{ type: "A", any: 11, other: "ab", props: "1" },
{ type: "B", any: 22, other: "bc", props: "2" }, // same type
{ type: "C", any: 33, other: "df", props: "3" }
];
const arrayList2 = [
{ type: "D", any: 44, other: "aa", props: "11" },
{ type: "B", any: 22, other: "bb", props: "2----2" , x: 10}, // same type
{ type: "E", any: 44, other: "cc", props: "33" }
];
result = arrayList2.reduce(function (arr1, arr2) {
let isMatchFound = false;
arr1.forEach(function (list) {
if (arr2.type == list.type) {
list = Object.assign(list, arr2);
isMatchFound = true;
}
});
if (!isMatchFound) {
arr1.push(arr2);
}
return arr1;
}, arrayList1);
console.log('result', JSON.stringify(result));
If you just wanted to make your code smaller:
You may also use
.reduce()
andObject.values()
methods to get the desired output:You could do something like this using
reduce
andObject.values
If you dont exactly need arrayList1 before arrayList2, you can use this one liner simple approach. What I have done is I have destructured all elements arrayList2 and only those elements of arrayList1 whose key does not exist in arrayList1.
P.S. the problem with
reduce
is you have to reduce the largest array otherwise you will miss out the elements of bigger Array.