Javascript 如何从父对象列表中删除子对象 var itemsTemp=[ {id:0,文本:'Andy'}, { id:1,文本:“哈里”, 儿童:[ {id:2,文本:'David'} ] }, {id:3,文本:'Lisa'}, {id:4,文本:'Mona'}, {id:5,文本:'Ron'}, {id:6,文本:'Joe'} ]; var items=itemsTemp; var filtered=items.filter(函数(项){ 返回项目id!==3; }); console.log(过滤);
这样,我只能删除父对象,但如何删除子对象?请帮助我修复此问题因为您要筛选子项,所以可以使用来执行数组的映射和筛选。当到达具有Javascript 如何从父对象列表中删除子对象 var itemsTemp=[ {id:0,文本:'Andy'}, { id:1,文本:“哈里”, 儿童:[ {id:2,文本:'David'} ] }, {id:3,文本:'Lisa'}, {id:4,文本:'Mona'}, {id:5,文本:'Ron'}, {id:6,文本:'Joe'} ]; var items=itemsTemp; var filtered=items.filter(函数(项){ 返回项目id!==3; }); console.log(过滤);,javascript,json,ecmascript-6,Javascript,Json,Ecmascript 6,这样,我只能删除父对象,但如何删除子对象?请帮助我修复此问题因为您要筛选子项,所以可以使用来执行数组的映射和筛选。当到达具有children属性的对象时,可以递归调用函数,然后对子数组.reduce()数组执行映射/过滤,如下所示: const items=[{id:0,text'Andy'},{id:1,text'Harry',children:[{id:2,text'David'}]},{id:3,text'Lisa'},{id:4,text'Mona'},{id:5,text'Ron'}
children
属性的对象时,可以递归调用函数,然后对子数组.reduce()
数组执行映射/过滤,如下所示:
const items=[{id:0,text'Andy'},{id:1,text'Harry',children:[{id:2,text'David'}]},{id:3,text'Lisa'},{id:4,text'Mona'},{id:5,text'Ron'},{id:6,text'Joe'};
常量过滤器项=(项目,fn)=>items.reduce((acc,项目)=>{
if(项目.子项)
返回[…acc,…过滤器项(项.子项,fn)];
其他如果(fn(项目))
返回[…附件,项目];
返回acc;
}, []);
const filtered=filteriems(items,item=>item.id!==2);
console.log(过滤)代码>我刚刚编写了filterById函数,我认为它适合您的情况
var itemsTemp=[
{id:0,文本:“Andy”},
{
id:1,
文字:“哈利”,
儿童:[{id:2,文本:“David”}],
},
{id:3,文本:“Lisa”},
{id:4,文本:“Mona”},
{id:5,文本:“Ron”},
{id:6,文本:“乔”},
];
var items=itemsTemp;
常量filterById=(项,id)=>{
返回项目。减少((累加器,当前值)=>{
if(currentValue.children){
const newCurrentValue=filterById(currentValue.children,id)
currentValue={…currentValue,子项:newCurrentValue}
}
if(currentValue.id!==id){
返回[…累加器,当前值]
}
回流蓄能器
},[])
}
日志(filterById(itemsTemp,2));
console.log(itemsTemp)
我认为您可以这样做
var itemsTemp=[
{id:0,文本:'Andy'},
{
id:1,文本:“哈里”,
儿童:[
{id:2,文本:'David'}
]
},
{id:3,文本:'Lisa'},
{id:4,文本:'Mona'},
{id:5,文本:'Ron'},
{id:6,文本:'Joe'}
];
var items=itemsTemp;
var filtered=items.filter(函数(项){
childrens=item.children;
国际单项体育联合会(儿童)
{
filteredchildren=childrens.filter(children=>children.id!==2);
项目.儿童=过滤儿童;
}
返回item.id!==2;
});
console.log(过滤)代码>如果要从对象中删除成员。您可以使用delete
。是否需要能够同时从父列表和子列表或仅从子列表中删除?是的,我只是更新了它不会修改原始对象的方式。作为filterById,我们可以动态id,而不仅仅是通过固定id进行过滤。工作正常,谢谢。如果在子组件var itemsTemp=[{id:0,text:'Andy'},{id:1,text:'Harry',子组件:[{id:2,text:'David',子组件:[{id:20,text:'David20'},]},我如何删除子组件,]},{id:3,文本:'Lisa'},{id:4,文本:'Mona'},{id:5,文本:'Ron'},{id:6,文本:'Joe'}]@顺便说一句,这个解决方案只有在对象嵌套两层时才有效。当{id:2,text:'David'}
有一个子数组,并持有一个具有要删除的id的对象时,这将无法处理这种情况
<script> var itemsTemp= [
{ id: 0, text: 'Andy' },
{
id: 1, text: 'Harry',
children: [
{ id: 2, text: 'David' }
]
},
{ id: 3, text: 'Lisa' },
{ id: 4, text: 'Mona' },
{ id: 5, text: 'Ron' },
{ id: 6, text: 'Joe' }
];
var items = itemsTemp;
var filtered = items.filter(function(item) {
return item.id !== 3;
});
console.log(filtered);
</script>