[英]count the total number of keys from nested objects and arrays
我有一個嵌套的 object 具有不同類型的屬性,包括字符串、object 和數組。 我使用遞歸的方法來統計object中的key的總數(從key1到key9),但未能得到正確的解決方案。 下面是我的代碼示例。
const data = {
key1: '1',
key2: '2',
key3: { key4: '4' },
key5: [
{
key6: '6',
key7: '7',
},
{
key8: '8',
key9: '9',
}
]
}
const countKeys = (data) => {
let count = 0;
const helper = (data) => {
for (let value of Object.values(data)) {
if (typeof value === 'object') {
helper(value);
}
// this line is problematic as it counts each object in the array as key.
if (!Array.isArray(value)) count++;
}
}
helper(data)
return count;
}
console.log(countKeys(data)) // 10, correct answer is 9
我試着繞了好幾個小時,但找不到解決方案。 誰能解釋一下我在這里缺少什么並應該添加以使其正常工作?
對於提供的數據,有九 (9) 個鍵。 您可以使用遞歸countKeys(t)
並對t
的類型進行類型分析 -
Object.values(t)
中的所有v
,減少並計數一加遞歸結果countKeys(v)
v
in t
,求和countKeys(v)
t
既不是 Object 也不是數組,返回零 function countKeys(t) { switch (t?.constructor) { case Object: // 1 return Object.values(t).reduce((r, v) => r + 1 + countKeys(v), 0) case Array: // 2 return t.reduce((r, v) => r + countKeys(v), 0) default: // 3 return 0 } } const data = {key1:"1",key2:"2",key3:{key4:"4"},key5:[{key6:"6",key7:"7"},{key8:"8",key9:"9"}]} console.log(countKeys(data))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.