Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算数组中可以为null或未定义的元素之和_Javascript_Arrays_Angularjs_Reduce - Fatal编程技术网

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

Javascript 计算数组中可以为null或未定义的元素之和,javascript,arrays,angularjs,reduce,Javascript,Arrays,Angularjs,Reduce,我有以下数组: myData = [[2, null, null, 12, 2], [0, 0, 10, 1, null], undefined]; 我想计算每个子数组的和,因此在我的例子中,结果应该是以下形式的数组:result=[16,11,0]。这意味着null和undefined将替换为零 如果没有最后一个元素,undefined,我的方法就可以正常工作: MyCtrl.sum = MyCtrl.myData.reduce(function (

我有以下数组:

myData = [[2, null, null, 12, 2],
          [0, 0, 10, 1, null],
           undefined];
我想计算每个子数组的和,因此在我的例子中,结果应该是以下形式的数组:
result=[16,11,0]
。这意味着
null
undefined
将替换为零

如果没有最后一个元素,
undefined
,我的方法就可以正常工作:

MyCtrl.sum = MyCtrl.myData.reduce(function (r, a) {
    a.forEach(function (b, i) {
        r[i] = (r[i] || 0) + b;
    }); 
    return r;
}, []);
如果有
null
未定义的子数组,我尝试了一些方法返回零,但我不知道如何:

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分支上没有定义“i”


您知道这个问题的解决方案吗?

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

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

var数组=[[2,null,null,12,2],[0,0,10,1,null],未定义],
result=array.map(a=>(a | |[]).reduce((s,v)=>s+(v | | 0),0));
控制台日志(结果)您可以尝试(使用lodash):


如何使用
.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 ]
var myData=[
[2,null,null,12,2],
[0,0,10,1,null],
未定义
];
var sum=myData.map(函数(项、索引){
如果(!item)返回0;

如果(item.length)是第一个数组的结果真的是14还是应该是16?好的,我想我更喜欢你的答案@Nina Scholz!
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 ]