鍍金池/ 問答/HTML/ 操作對象里的值

操作對象里的值

var arr = [
    {
        name:"新聞",
        id:1,
        parent_id: 0,
        child:[
        {
          name:"廣東新聞",
          id:2,
          parent_id: 1,
            child:[
              {
                now: true,
                  name:"深圳新聞",
                  id:4,
                  parent_id: 2
              },{
                now: false,
                  name:"廣州新聞",
                  id:5,
                  parent_id: 2
              }
          ]
        },
        {
          name:"湖南新聞",
          id:3,
          parent_id: 1,
          child:[
            {
              now: true,
              name:"株洲新聞",
              parent_id: 3,
              id:6
            },{
              now: false,
              name:"長沙新聞",
              parent_id: 3,
              id:7
            }
          ]
        }]
      },
      {
        name:"學(xué)院",
        id:8,
        parent_id: 0,
        child:[
        {
          name:"廣東學(xué)院",
          id:9,
          parent_id: 8,
            child:[
              {
                now: true,
                  name: "深圳大學(xué)",
                  id:11,
                  parent_id: 9
              },{
                now: false,
                  name:"中山大學(xué)",
                  id:12,
                  parent_id: 9
              }
          ]
        },
        {
          name:"湖南學(xué)院",
          id:10,
          parent_id: 8,
          child:[
            {
              now: false,
              name:"長沙師范學(xué)院",
              parent_id: 10,
              id:13
            },{
              now: false,
              name:"株洲學(xué)院",
              parent_id: 10,
              id:14
            }
          ]
        }]
      },
    ];

我想獲取數(shù)組的最后級一級如果now為true的話根據(jù)他的parent_id找到他的父級,
然后獲取它以及它父級的id,這樣不斷向上獲取它的父級
最后返回一個(gè)數(shù)組結(jié)果是[1,2,3,4,6,8,9,11]
這樣該怎么查找?

回答
編輯回答
耍太極

你的思路很明確,學(xué)一下js的基礎(chǔ)語法和數(shù)組操作就知道怎么做了。

2017年12月23日 14:18
編輯回答
毀憶

你的意思是會有多個(gè)諸如[1,2...11]類似這樣導(dǎo)航到最終now=true的數(shù)組?
如果是這樣,其實(shí)你應(yīng)該從頂部開始查詢,查詢到一級有分支就深拷貝一個(gè)數(shù)組對應(yīng)不同分支,直到底層,然后排除掉不符合要求的。這樣可能效率更高一些。當(dāng)然,這樣做的前提是提供的數(shù)據(jù)是符合結(jié)構(gòu)的。

正確的只有3個(gè)路徑,是[[1,2,4],[1,3,6],[8,9,11]]

//實(shí)現(xiàn)的代碼
function objP(bArr, inArr){
    var rt=[];
    for(var i=0;i<inArr.length;i++){
        if(inArr[i].now===false){
            continue;
        } else if(inArr[i].now){
            var newBArr=bArr.concat(inArr[i].id);
            rt.push(newBArr);
            continue;
        } else if(inArr[i].child){
            var tmp=objP([inArr[i].id], inArr[i].child)
            for(var j=0;j<tmp.length;j++){
                rt.push(bArr.concat(tmp[j]));
            }
        } 
    }
    return rt;
}   

console.log(objP([],arr));  
2018年3月18日 05:12