如何使用数组减少来求和对象属性长度,不带类型
How do I use array reduce to sum object property lengths w/o typeof
我有一个对象数组,每个对象都包含其他对象的数组。我想使用 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;
});
似乎必须有一种方法可以在没有类型的情况下做到这一点。有什么想法吗?
您所
要做的就是为累加器提供一个初始值:
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)
)。
为什么不使用起始值并检查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);
相关文章:
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 看到“;未捕获的类型错误:无法读取属性'weight'未定义的“;尽管按照字面上的指示
- Alfresco JavaScript,当文件上传到网站时,设置自定义类型属性
- 有没有一种方法可以通过列类型/属性来格式化MySQL单元格数据
- 如何访问javaScript Number类型属性
- 我如何使用jQuery添加与名称值相同的输入类型属性
- 任何人都知道为什么 XHTML 中没有类型属性“text/css”的