我有一个对象数组,每个对象都包含一个其他对象的数组。我想使用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;
});似乎必须有一种方法可以在没有类型的情况下做到这一点。有什么想法吗?
发布于 2016-04-25 23:50:45
为什么不使用起始值并检查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);发布于 2016-04-25 23:51:04
您需要做的就是为累加器提供一个初始值:
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))。
https://stackoverflow.com/questions/36845259
复制相似问题