根据id删除元素 多层结构

let panlist = [{
                "Data": [{
                    "FlightRouteNodeId": "dbb7d627-dc52",
                    "Path": "ZBCZ SQ",
                }, {
                    "FlightRouteNodeId": "d41d321c-f159",
                    "Path": "ZBCZ SQ H34",
                }],
                "title": "ZBCZ-ZUUU"
                }, {
                "Data": [{
                    "FlightRouteNodeId": "57c391b1-03c7",
                    "Path": "ZBCZ SQ",
                }, {
                       "FlightRouteNodeId": "43c716e5-5718",
                       "Path": "ZBCZ SQ H34",
                   }],
                   "title": "ZBCZ-ZUUU"
                }]

这种结构,点击按钮能拿到FlightRouteNodeId,根据它取匹配这个大数组相应的数据,然后删除包含对应FlightRouteNodeId的对象,怎么写?
比如我点击按钮取到了"dbb7d627-dc52",对应的就是panList[0].Data[0].FlightRouteNodeId,需求就是删除panList[0].Data[0]

阅读 4.1k
4 个回答

最简单的 点击按钮能拿到FlightRouteNodeId 然后直接循环 panlist 再循环panlist[i].Data 然后判断
panlist[i].Data[j].FlightRouteNodeId==获取到的FlightRouteNodeId 然后splice(j,1)

//外层遍历,内层Data数组使用lodash去找目标对象的下标
for(var i=0;i<panlist.length;i++){,
    var dataArr = panlist[i].Data
    let index=lodash.findIndex(dataArr,['FlightRouteNodeId',FlightRouteNodeId])
    //然后就去删除吧
}

lodash findIndex使用说明

function delObjById(id) {
    panlist.forEach((val,i) => {
        if(val.Data && Array.isArray(val.Data)){
            val.Data.forEach((item,index) => {
               if (item.FlightRouteNodeId == id) {
                   val.Data.splice(index,1)
                   if(!val.Data.length){
                      panlist.splice(i,1)
                   }
                }
           })
        }
    })
    return panlist
}

建议另外建立一个数组index和FlightRouteNodeId的map表,然后每次删除更新数组和map。

推荐问题