想知道这段代码的含义

时间:2019-06-27 10:22:31

标签: javascript arrays object ecmascript-6

我在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数组中的值数量?

1 个答案:

答案 0 :(得分:1)

它看起来像一个深层的对象计数器-因此它将计算一个对象本身中有多少个值。如果您传递的密钥在对象中,则返回1;如果对象不是对象,则返回0;其他任何数字(包括01 ,令人困惑)这将是对象的数量。

第二行是箭头函数,如果传递的object是虚假的或不是对象,则返回布尔值。

return语句(最后一个)遍历对象中的每个值,并获取每个项目的计数。而且由于subCountcount都是递归的,所以这可能会进入多个递归级别。

(这也是编写此函数恕我直言的非常规且性能低下的方式。)