I am trying to merge all the nested array with same keys, there are more then 100 nested arrays, I want them all to be merged when key is same.
I have tried to merge arrays with a little harder way (which I don't want because I have 100 plus nested arrays).
var keys = [];
var stream = {arr1: [], arr2:[], arr3:[]}; // Nested Arrays
for(var i =0;i<arr_main.length;i++){
for(var key in arr_main[i]){
if(keys.find(x => x === key))
{
if(key == "arr1")
{
let arr = stream.arr1
let union = [...new Set([...arr, ...arr_main[i][key]])];
stream.arr1 = union
}
else if(key == "arr2")
{
let arr = stream.arr2
let union = [...new Set([...arr, ...arr_main[i][key]])];
stream.arr2 = union
}
else if(key == "arr3")
{
let arr = stream.arr3
let union = [...new Set([...arr, ...arr_main[i][key]])];
stream.arr3 = union
}
}else{
if(key == "arr1")
stream.arr1 = arr_main[i][key]
else if(key == "arr2")
stream.arr2 = arr_main[i][key]
else if(key == "arr3")
stream.arr3 = arr_main[i][key]
}
if(!keys.find(x => x === key))
keys.push(key);
}
}
Expected Output:
{"arr1":[{"val1":"val1","val2":"val2"},{"val1":"val111","val2":"val222"}],"arr2":[{"val1":"val11","val2":"val22"},{"val1":"val1","val2":"val2"}],"arr3":[{"val1":"val111","val2":"val222"},{"val1":"val11","val2":"val22"}]}
You could reduce
the array. Inside, loop through the entries
of each object. Add each key to the accumulator and merge them.
const input=[{arr1:[{val1:"val1",val2:"val2"}],arr2:[{val1:"val11",val2:"val22"}],arr3:[{val1:"val111",val2:"val222"}]},{arr1:[{val1:"val111",val2:"val222"}],arr2:[{val1:"val1",val2:"val2"}],arr3:[{val1:"val11",val2:"val22"}]}];
const output = input.reduce((acc, o) => {
Object.entries(o).forEach(([key, arr]) => {
acc[key] = acc[key] || [];
acc[key].push(...arr)
})
return acc
}, {})
console.log(output)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加