[英]Compare array of objects by a property and then append the new object inside the array: Javascript
I have two array of objects, where in the name
in these needs to be compared and get the values and append it to one of the array.我有两个对象数组,其中需要比较这些对象的
name
并将值和 append 放入数组之一。 I was able to do it for the first level, How can I achieve the same recursively and update the object.我能够在第一级做到这一点,我怎样才能递归地实现相同的目标并更新 object。
const arr1 = [
{
name: "internalcorp.com",
children: [
{
name: "internalcorp.com.child1",
children: [
{
name: "internalcorp.com.grandchild1",
children: []
},
{
name: "internalcorp.com.grandchild2",
children: []
}
]
},
{
name: "internalcorp.com.child2",
children: []
}
]
},
{
name: "internalcorpwebsite.com",
children: [
{
name: "internalcorpwebsite.com.child1",
children: []
}
]
}
];
const arr2 = [
{
name: "internalcorp.com",
val1: false,
val2: false
},
{
name: "internalcorp.com.child1",
val1: true,
val2: true
},
{
name: "internalcorp.com.grandchild1",
val1: true,
val2: true
},
{
name: "internalcorp.com.grandchild2",
val1: false,
val2: true
},
{
name: "internalcorp.com.child2",
val1: true,
val2: false
},
{
name: "internalcorpwebsite.com",
val1: false,
val2: false
},
{
name: "internalcorpwebsite.com.child1",
val1: false,
val2: false
}
];
Output should look like Output 应该是这样的
const res = [
{
name: "internalcorp.com",
config: {
val1: false,
val2: false
},
children: [
{
name: "internalcorp.com.child1",
config: {
val1: true,
val2: true
},
children: [
{
name: "internalcorp.com.grandchild1",
config: {
val1: true,
val2: true
},
children: []
},
{
name: "internalcorp.com.grandchild2",
config: {
val1: false,
val2: true
},
children: []
}
]
},
{
name: "internalcorp.com.child2",
config: {
val1: true,
val2: false
},
children: []
}
]
},
{
name: "internalcorpwebsite.com",
children: [
{
name: "internalcorpwebsite.com.child1",
className: "level-1 leaf",
children: [],
val1: false,
val2: false
}
],
config: {
val1: false,
val2: false
}
}
];
Code that I tried我试过的代码
const result = arr1.map((item) => {
let config = arr2.find((p) => p.name === item.name);
return {
...item,
config: {
val1: config.val1,
val2: config.val2
}
};
});
You're very close What to do:你非常接近怎么办:
.map()
in a named function so it can be called recursively (I went with addConfig
).map()
包装在命名为 function 中,以便可以递归调用它(我使用addConfig
).map()
, add the key/value pair children: addConfig(item.children)
.map()
的返回 object 中,添加键/值对children: addConfig(item.children)
That'll do the trick.那会成功的。
const arr1 = [ { name: "internalcorp.com", children: [ { name: "internalcorp.com.child1", children: [ { name: "internalcorp.com.grandchild1", children: [] }, { name: "internalcorp.com.grandchild2", children: [] } ] }, { name: "internalcorp.com.child2", children: [] } ] }, { name: "internalcorpwebsite.com", children: [ { name: "internalcorpwebsite.com.child1", children: [] } ] } ]; const arr2 = [ { name: "internalcorp.com", val1: false, val2: false }, { name: "internalcorp.com.child1", val1: true, val2: true }, { name: "internalcorp.com.grandchild1", val1: true, val2: true }, { name: "internalcorp.com.grandchild2", val1: false, val2: true }, { name: "internalcorp.com.child2", val1: true, val2: false }, { name: "internalcorpwebsite.com", val1: false, val2: false }, { name: "internalcorpwebsite.com.child1", val1: false, val2: false } ]; const addConfig = (items) => items.map(item => { const { val1, val2 } = arr2.find(p => p.name === item.name); return {...item, config: { val1, val2 }, children: addConfig(item.children) }; }); const result = addConfig(arr1); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.