鍍金池/ 問答/Java  PHP  Python  HTML/ 遍歷同結(jié)構(gòu)的數(shù)組,怎么刪除子元素只刪除子元素,刪除父元素,則刪除父元素,保留子元

遍歷同結(jié)構(gòu)的數(shù)組,怎么刪除子元素只刪除子元素,刪除父元素,則刪除父元素,保留子元素,如下圖和代碼

問題

我刪除紅色框,會把父紅色框的數(shù)據(jù)刪除,保留子藍(lán)色框
刪除子藍(lán)色框 ,就刪除子藍(lán)色框 ,不會影響父紅色框的數(shù)據(jù)
clipboard.png

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        var data = [{
            id: "1",
            name: "1a",
            children: [{
                id: "1.1",
                name: "1.1a"
            }]
        }, {
            id: "2",
            name: "2b",
            children: [{
                id: "2.1",
                name: "2.1b",
                children: [{
                    id: "2.1.1",
                    name: "2.1.1.b"
                }]
            }, {
                id: "2.2",
                name: "2.2b"
            }, {
                id: "2.3",
                name: "2.3b"
            }]
        }, {
            id: "3",
            name: "3c"
        }]
        console.log(data)
        var id1 = "1";
        var id2 = "1a"
        var findId = data.find(item => {
            item.id == id1;
        });
        data.indexOf(findId)
        data.splice(length,1)
        console.log(data)
    </script>
</body>

</html>
回答
編輯回答
愿如初
//遞歸查找出id所在數(shù)組,返回其數(shù)據(jù)及所在下標(biāo)
function findParent(data,id){
  for(let i=0; i<data.length; i++){
    if(data[i].id == id){
      return {data: data, index:i}
    }else if(data[i].children && data[i].children.length){
      let res = findParent(data[i].children,id);
      if(res) reuturn res
    } 
  }
}

let parentData = findParent(data,id);
if(parentData){
  let child = parentData.data[parentData.index].children || [];
  parentData.data.splice(parentData.index,1,...child); //子數(shù)據(jù)替換父數(shù)據(jù)
}
2018年3月13日 17:23