从主数组中获取所有嵌套数组,并根据键 Knockout.Js 合并每个嵌套数组
Get all the nested arrays from main array and merge each of them according to keys Knockout.Js
我想合并所有具有相同键的嵌套数组,有超过 100 个嵌套数组,我希望当键相同时将它们全部合并。
我尝试用更难的方式合并数组(我不想要这样,因为我有 100 多个嵌套数组)。
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);
}
}
预期输出:
{"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"}]}
您可以 reduce
the array. Inside, loop through the entries
每个对象。将每个键添加到累加器并合并它们。
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)
我想合并所有具有相同键的嵌套数组,有超过 100 个嵌套数组,我希望当键相同时将它们全部合并。
我尝试用更难的方式合并数组(我不想要这样,因为我有 100 多个嵌套数组)。
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);
}
}
预期输出:
{"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"}]}
您可以 reduce
the array. Inside, loop through the entries
每个对象。将每个键添加到累加器并合并它们。
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)