计算可以为null或未定义的数组元素的总和

时间:2018-02-02 08:30:16

标签: javascript arrays angularjs reduce

我有以下数组:

myData = [[2, null, null, 12, 2],
          [0, 0, 10, 1, null],
           undefined];

我想计算每个子数组的总和,所以在我的情况下,结果应该是这种形式的数组:result = [16, 11, 0]。这意味着nullundefined将替换为零。

如果我没有最后一个元素undefined

,我的方法可以正常工作
MyCtrl.sum = MyCtrl.myData.reduce(function (r, a) {
    a.forEach(function (b, i) {
        r[i] = (r[i] || 0) + b;
    }); 
    return r;
}, []);

如果有nullundefined作为子数组,我尝试了一些返回零的方法,但我不知道如何:

MyCtrl.sum = MyCtrl.myData.reduce(function (r, a) {
    if(a) {
    a.forEach(function (b, i) {
        r[i] = (r[i] || 0) + b;
    }); } else {
        r[i] = 0;
    }
    return r;
}, []);

它说'我'没有在else分支上定义。

你知道解决这个问题吗?

3 个答案:

答案 0 :(得分:8)

您可以通过检查内部数组来映射值,如果没有给出,则将数组作为默认值。

对于添加,您可以在reduce中使用零作为默认值,零作为起始值。



{{products | filter : {'pluNo':item.plu1} }} //dont run
{{products[item.plu2].pluName}} // gives me pluName but by index instead of by pluNo




答案 1 :(得分:1)

你可以尝试(使用lodash):

var array = [[2, null, null, 12, 2], [0, 0, 10, 1, null], undefined],
    result = array.map(a => (a || []).reduce((s, v) => s + (v || 0), 0));
    
console.log(result);

答案 2 :(得分:1)

如何使用.map

var myData = [
    [2,null,null,12,2],
    [0,0,10,1,null],
    undefined
];

var sum = myData.map(function(item,index){
    if(!item)return 0;
    if(item.length <2)return item[0];
    return item.reduce(function(i1,i2){return i1+i2});
});;


console.log(sum);//[ 16, 11, 0 ]