Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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>