2017-06-08 47 views
-3

的對象是什麼遞歸的方式來獲得蒂蒂在下列對象的數量:遞歸的方式尋找項目的數量在陣列

{ 
    titi: "h0", 
    history: [{ 
     titi: "h1", 
     history: [{ 
      titi: "h11" 
     }, { 
      titi: "h12" 
     }] 
    }, { 
     titi: "h12", 
     history: [{ 
      titi: "h121" 
     }, { 
      titi: "h122" 
     }] 
    }] 
} 

預期的結果總。在這個例子中:7

+0

我建議寫出來,你覺得你需要獲得一個準確計數的步驟開始。每一步之前的前提條件是什麼,以及在每一步中你期待什麼輸入。然後寫下每步的結果和輸出結果。你可以先開始迭代,看看你是否完全理解了這個問題。然後嘗試遞歸方法。確定你有一個退出條款。 – scrappedcola

+0

到目前爲止您嘗試過什麼? –

+0

Uuuhhh ... OP?你有問題的意見和答案... –

回答

1

var data = { 
 
    titi: "h0", 
 
    history: [{ 
 
    titi: "h1", 
 
    history: [{ 
 
     titi: "h11" 
 
    }, { 
 
     titi: "h12" 
 
    }] 
 
    }, { 
 
    titi: "h12", 
 
    history: [{ 
 
     titi: "h121" 
 
    }, { 
 
     titi: "h122" 
 
    }] 
 
    }] 
 
} 
 

 
var numberOfTiti = 0; 
 
function process (obj) { 
 
    for (var index in obj) { 
 
    if (index === 'titi') { 
 
     numberOfTiti++; 
 
    } 
 
    if (typeof obj[index] === 'object') { 
 
     process(obj[index]); 
 
    } 
 
    } 
 
} 
 

 
process(data); 
 
console.log(numberOfTiti);

-1

一個有趣,輕鬆,無限遞歸的方式做到這一點:

let obj = { 
 
    titi: "h0", 
 
    history: [{ 
 
     titi: "h1", 
 
     history: [{ 
 
      titi: "h11" 
 
     }, { 
 
      titi: "h12" 
 
     }] 
 
    }, { 
 
     titi: "h12", 
 
     history: [{ 
 
      titi: "h121" 
 
     }, { 
 
      titi: "h122" 
 
     }] 
 
    }] 
 
} 
 

 
let count = JSON.stringify(obj).match(/"titi":/g).length 
 

 
console.log(count) // 7

+0

@torazaburo請問我爲什麼修改了我的答案並添加了一個不在OP問題中的密鑰?而且,我是否可以知道爲什麼這會被低估?據我所知,導致它起作用。 –

+0

好吧,顯然不是。 –

1

var json = { titi:"h0", history : [{ titi :"h1", history : [{ titi :"h11"}, { titi : "h12"}] }, { titi : "h12", history : [{ titi :"h121"}, { titi : "h122"}]}]} 
 

 
var count = 0; 
 

 
function getCount(haystack, needle) { 
 
    for (var k in haystack) { 
 
     if (haystack.hasOwnProperty(k)) { 
 
      if (k == needle) {count = count + 1}; 
 
      if (typeof haystack[k] === 'object') getCount(haystack[k], needle); 
 
     } 
 
    } 
 
} 
 

 
getCount(json, 'titi'); 
 
console.log('count: ',count)

1

使用JSON.stringify

function countTiti(obj) { 
    let count = 0; 
    JSON.stringify(obj, (k, v) => { if (k === 'titi') count++; return v; }); 
    return count; 
}