如何使用数组reduce来汇总对象属性长度w / o typeof

时间:2016-04-25 15:45:17

标签: javascript arrays

我有一个对象数组,每个对象都包含一个其他对象的数组。我想使用reduce来总结所有这些数组的长度。要做到这一点,我似乎必须首先提供@JsonBackReference检查......

typeof

似乎必须有一种方法可以在没有typeof的情况下执行此操作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

为什么不使用起始值并检查a.subItems是否为数组?

var totalTasks = $scope.list.reduce(function(r, a){
    if ('subItems' in a && Array.isArray(a.subItems) {
        return r + a.subItems.length;
    }
    return r;
}, 0);

答案 1 :(得分:1)

您所要做的就是为累加器提供初始值:

var totalTasks = $scope.list.reduce(function(num, el) {
  return num + el.subItems.length;
}, 0);
// ^

您可以确定num始终是一个数字。如果您需要检查el是否确实存在且包含subItems,您当然可以添加num + (el && el.subItems && el.subItems.length || 0))。