首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用数组reduce求和对象属性长度(不带typeof

如何使用数组reduce求和对象属性长度(不带typeof
EN

Stack Overflow用户
提问于 2016-04-25 23:45:17
回答 2查看 46关注 0票数 0

我有一个对象数组,每个对象都包含一个其他对象的数组。我想使用reduce对所有这些数组的长度求和。要做到这一点,我似乎必须首先像这样提供一个typeof检查……

代码语言:javascript
运行
复制
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;
});

似乎必须有一种方法可以在没有类型的情况下做到这一点。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-25 23:50:45

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

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2016-04-25 23:51:04

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

代码语言:javascript
运行
复制
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))。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36845259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档