我有一个对象数组,每个对象包含其他对象的数组。我想使用reduce求和所有这些数组的长度。为此,我似乎必须像这样先提供typeof检查...

var totalTasks = $scope.list.reduce(function(a, b){
  var aNum = 0, bNum = 0;
  if(typeof a === "object" && a.subItems){
      aNum = a.subItems.length
  }
  else{
      aNum = a
  }
  if(b.subItems) {
      bNum = b.subItems.length;
  }
  return aNum + bNum;
});


似乎必须要有一种没有typeof的方法。有任何想法吗?

最佳答案

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

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


在这里,您可以确保num始终是数字。如果需要检查el是否确实存在并包含subItems,则可以添加(cc)。

关于javascript - 我如何使用数组归约求和不带typeof的对象属性长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36845259/

10-13 01:08