javascript中的映射嵌套数组
我有一个嵌套的对象数组,如下所示:javascript中的映射嵌套数组,javascript,dictionary,filter,nested-object,Javascript,Dictionary,Filter,Nested Object,我有一个嵌套的对象数组,如下所示: let data = [ { id: 1, title: "Abc", children: [ { id: 2, title: "Type 2", children: [ { id: 23, ti
let data = [
{
id: 1,
title: "Abc",
children: [
{
id: 2,
title: "Type 2",
children: [
{
id: 23,
title: "Number 3",
children:[] /* This key needs to be deleted */
}
]
},
]
},
{
id: 167,
title: "Cde",
children:[] /* This key needs to be deleted */
}
]
我所要做的就是递归地查找没有子元素的leaves
(当前为空数组),并从中删除children属性
这是我的密码:
normalizeData(data, arr = []) {
return data.map((x) => {
if (Array.isArray(x))
return this.normalizeData(x, arr)
return {
...x,
title: x.name,
children: x.children.length ? [...x.children] : null
}
})
}
您需要为此使用递归:
let数据=[{
id:1,
标题:“Abc”,
儿童:[{
id:2,
标题:“第2类”,
儿童:[{
id:23,
标题:“3号”,
子项:[]/*需要删除此密钥*/
}]
}]
},
{
身份证号码:167,
标题:“Cde”,
子项:[]/*需要删除此密钥*/
}
]
函数遍历(obj){
用于(对象中的常数k){
if(对象的类型[k]='object'&&obj[k]!==null){
if(k=='children'&&!obj[k].length){
删除obj[k]
}否则{
导线测量(obj[k])
}
}
}
}
导线测量(数据)
console.log(data)
Nik的答案很好(尽管我不认为像那样访问子项
键有什么意义),但是如果有帮助的话,这里有一个较短的选择:
let数据=[
{id:1,标题:“Abc”,儿童:[
{id:2,标题:“第2类”,儿童:[
{id:23,标题:“3号”,儿童:[]}
]}
]},
{id:167,标题:“Cde”,儿童:[]}
];
data.forEach(deleteEmptyChildren=o=>
o、 children.length?o.children.forEach(deleteEmptyChildren):删除o.children);
控制台日志(数据)代码>您可以使用递归这样做
因此这里的基本思想是在removemptychild
函数中检查子项长度是否为非零。因此,如果是这样,我们循环子数组中的每个元素,并将其函数作为参数再次传递,如果子元素长度为零,则删除子元素键
let data=[{id:1,title:“Abc”,子项:[{id:2,title:“Type2”,子项:[{id:23,title:“Number3”,子项:[]},]},{id:167,title:“Cde”,子项:[]},{id:1}]
函数removeEmptyChild(输入){
if(input.children&&input.children.length){
input.children.forEach(e=>removemptychild(e))
}否则{
删除input.children
}
返回输入
}
data.forEach(e=>removemptychild(e))
log(数据)
只需要使用forEach进行简单的递归
let数据=[{
id:1,
标题:“Abc”,
儿童:[{
id:2,
标题:“第2类”,
儿童:[{
id:23,
标题:“3号”,
子项:[]/*需要删除此密钥*/
}]
}, ]
},
{
身份证号码:167,
标题:“Cde”,
子项:[]/*需要删除此密钥*/
}
]
常量清理=数据=>
data.forEach(n=>
n、 儿童身高
?清理(不包括儿童)
:(删除n.儿童)
清理(数据)
console.log(data)
您到现在为止的努力?添加了代码,请看一看这是一个非常好的解决方案如果Objective中没有子项,这将失败。我只是不喜欢额外的循环来初始化它。@CodeManiac仔细查看OP的输入,它似乎总是在这里,即使它是空的(这就是他想从一开始就删除它们的原因)。如果不是这样的话,代码很容易调整。@CodeManiace.children&&e.children.length
解决了这个问题,所以没什么大不了的。你为什么要使用map?@epascarello哦,我的错。我在这里忽略了map的使用。谢谢你指出了使用forEach的最佳案例