我有一個嵌套物件,它具有不同型別的屬性,包括字串、物件和陣列。我使用遞回的方法來計算物件中鍵的總數(從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
我試著繞了好幾個小時,但找不到解決方案。誰能解釋一下我在這里缺少什么并應該添加以使其正常作業?
uj5u.com熱心網友回復:
對于提供的資料,有九 (9) 個鍵。您可以使用遞回countKeys(t)并對t's 型別進行型別分析-
- 當它是一個物件時,對于所有
vinObject.values(t),減少并計數一加遞回結果,countKeys(v) - 當它是一個陣列時,對于 all
vint, sumcountKeys(v) - 否則
t既不是物件也不是陣列,回傳零
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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405873.html
標籤:
