用forEach或是map删除符合条件的元素?

var arr = [{
                isChecked: true,
                children: [{
                    isChecked: false,
                    value: 1
                }]
            },
            {
                isChecked: false,
                children: [{
                    isChecked: true,
                    value: 123
                },{
                    isChecked: false,
                    value: 456
                }]
            }
        ]
        
        for(var i=arr.length-1;i>=0;i--){
            if(arr[i].isChecked){
                arr.splice(i,1)
            }
        }
        console.log(arr)

问题描述:期望删除父级节点及子节点isChecked为true的元素;
提问:用foreach替代下面for循环,如何实现呢?

阅读 5k
3 个回答

由于 是需要删除数据元素,forEachmap 都不合适,可以使用 filter

arr.filter(it => it.isChecked !== true)
let tmpArr = arr.filter(item=>{
                    item.children.forEach((i,index,ar)=>{
                        if(i.isChecked){
                            item.children.splice(index,1)
                        }
                    });
                return !item.isChecked
            })
console.log(tmpArr)

递归 + filter

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题