在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js 遞歸對象中,根據(jù)id刪除某一項

js 遞歸對象中,根據(jù)id刪除某一項

  1. input ID和一個遞歸對象,刪除有ID的該項
  2. 我寫的函數(shù)如下
      function deleteNode(paramId,obj){
        console.log('enterDelete',obj)
        for(let o in obj){
          if(obj[o].paramId==paramId){
            console.log('從那個里刪除',obj)
            obj.splice(o,1)
            return obj
          }
          else{
            if(obj[o].hasOwnProperty('subList')&&obj[o].subList.length!=0){
              console.log(4,JSON.parse(JSON.stringify(obj[o].subList)))
              let m=JSON.parse(JSON.stringify(obj[o].subList))
              deleteNode(paramId,m)
            }
          }
        }

      }

期望

obj={
    "paramId":"默認字典",
    "sourcePath":"默認路徑",
    "subList":[
        {
            "paramId":500064,
            "sourcePath":"Result",
            "subList":[
                {
                    "paramId":500061,
                    "sourcePath":"Partners",
                    "subList":[

                    ]
                }
            ]
        }
    ]
}

paramId=500061

//  期望輸出

{
    "paramId":"默認字典",
    "sourcePath":"默認路徑",
    "subList":[
        {
            "paramId":500064,
            "sourcePath":"Result",
            "subList":[
              //  刪除這一項
            ]
        }
    ]
}
回答
編輯回答
傲嬌范

參考一下:

function deleteNode(paramId, obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj
  }
  const copy = Array.isArray(obj) ? [] : {};
  Object.keys(obj).forEach(key => {
    if (paramId !== obj[key].paramId) {
      copy[key] = deleteNode(paramId, obj[key])
    }
  })
  return copy;
}
2017年4月18日 19:37
編輯回答
大濕胸
function mydelete(id,obj){
  if(obj.paramId===id){
    return true;
  }
  let pure = [];
  for(let i of obj.subList){
    if(mydelete(id,i)){
    }else{
      pure.push(i);
    }
  }
  obj.subList = pure;
  return false;
}

主要問題是遞歸到下一層以后無法刪除自己,所以通知上層的遞歸刪除它就好了,
這里刪除的方法,我是直接用的arr替換,如果你有其他的方法也是可以的,注意循環(huán)刪除時別讓數(shù)組越界就好了

2017年2月13日 02:02