gpt4 book ai didi

javascript - 计算嵌套对象中的键

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:41 24 4
gpt4 key购买 nike

我正在尝试统计嵌套 JS 对象中的键。我能够进入第一个级别,但我对如何让它深入嵌套对象并返回计数有点困惑。

var properties = {
prop1: '',
prop2: '',
prop3: '',
prop4: {
subProp1: '',
subProp2: '',
subProp3: {
subSubprop1: ''
}
}
}

var getCount = function (data) {
var count = 0;
for (var k in data) {
if (properties.hasOwnProperty(k)) {
++count;
}
}
console.log( "this is the count for level 0: " + count //returns 4);
console.log( "this is the count for level 1: " + count //should return 3);
console.log( "this is the count for level 2: " + count //should return 1);
return count;
}
getCount(properties);

最佳答案

如果属性是一个对象,你可以进行递归:

 var properties = {
prop1: '',
prop2: '',
prop3: '',
prop4: {
subProp1: '',
subProp2: '',
subProp3: {
subSubprop1: ''
}
}
},
count = [];

// i suggest to use named function for recursion, because the name is used
// inside the function. otherwise it is not safe, if the name does not
// match the given name at assignment
function getCount(data, level) {
level = level || 0;
count[level] = count[level] || 0;
for (var k in data) {
data.hasOwnProperty(k) && count[level]++;
typeof data[k] === 'object' && getCount(data[k], level + 1);
}
}

getCount(properties);
document.write('<pre>' + JSON.stringify(count, 0, 4) + '</pre>');

奖励:一个以函数式风格内置计数的版本

var properties = {
prop1: '',
prop2: '',
prop3: '',
prop4: {
subProp1: '',
subProp2: '',
subProp3: {
subSubprop1: ''
}
}
};

function f(o, l, r) {
l = l || 0;
return Object.keys(o).reduce(function (r, k) {
r[l] = (r[l] || 0) + 1;
typeof o[k] === 'object' && f(o[k], l + 1, r);
return r;
}, r || []);
}

document.write('<pre>' + JSON.stringify(f(properties), 0, 4) + '</pre>');

关于javascript - 计算嵌套对象中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com