我在How to count number of values in array?看到了这段代码。作为我其他问题的解决方案。
这解决了我的问题,但是我不想在不知道含义的情况下使用它。有人可以给我详细解释一下此代码吗?
function count(object, key, subKey) {
const noObject = o => !o || typeof o !== 'object';
function subCount(object) {
if (noObject(object)) return 0;
if (subKey in object) return 1;
return Object.values(object).reduce((s, o) => s + subCount(o), 0);
}
if (noObject(object)) return 0;
if (key in object) return subCount(object[key]);
return Object.values(object).reduce((s, o) => s + count(o, key, subKey), 0);
}
这是否用于计数JSON数组中的值数量?
答案 0 :(得分:1)
它看起来像一个深层的对象计数器-因此它将计算一个对象本身中有多少个值。如果您传递的密钥在对象中,则返回1
;如果对象不是对象,则返回0
;其他任何数字(包括0
和1
,令人困惑)这将是对象的数量。
第二行是箭头函数,如果传递的object
是虚假的或不是对象,则返回布尔值。
return
语句(最后一个)遍历对象中的每个值,并获取每个项目的计数。而且由于subCount
和count
都是递归的,所以这可能会进入多个递归级别。
(这也是编写此函数恕我直言的非常规且性能低下的方式。)