簡體   English   中英

計算嵌套對象和 arrays 的鍵總數

[英]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的類型進行類型分析 -

  1. 當它是 Object 時,對於Object.values(t)中的所有v ,減少並計數一加遞歸結果countKeys(v)
  2. 當它是一個數組時,對於所有v in t ,求和countKeys(v)
  3. 否則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM