在JavaScript中添加多维数字数组的和

在JavaScript中添加多维数字数组的和,javascript,arrays,Javascript,Arrays,这似乎是一个给定的问题,但我想要一个答案,我只使用我认为是函数式编程的东西。。。因此()循环没有。假设我有一个多维数组,它只包含数字和数字的数组!大概是这样的: var numberArray = [[1,5,12],[1,-1], [5,11,45,-3],[0,1,2] ... ]; 现在,我希望使用.forEach和/或.reduce来获得numberArray中所有数字的总和,而不是使用嵌套循环,但是,我还希望执行一个操作,以便在进行加法时忽略任何负数或赋予值0。我认为这样做会奏效:

这似乎是一个给定的问题,但我想要一个答案,我只使用我认为是函数式编程的东西。。。因此()循环没有
。假设我有一个多维数组,它只包含数字和数字的数组!大概是这样的:

var numberArray = [[1,5,12],[1,-1], [5,11,45,-3],[0,1,2] ... ];
现在,我希望使用
.forEach
和/或
.reduce
来获得
numberArray
中所有数字的总和,而不是使用嵌套循环,但是,我还希望执行一个操作,以便在进行加法时忽略任何负数或赋予值0。我认为这样做会奏效:

numberArray.reduce(function(a, b) {
    a.concat(b);
}, []);

但我不知道如何执行操作,将负数设置为0(或忽略它们),然后获得总和

您可能需要做两次reduce

试试这个

numberArray.reduce(function(prev,current){return prev.concat(current)}).reduce(function(prev,current){return prev+current});
演示

var numberArray=[[1,5,12],[1,-1],[5,11,45,-3],[0,1,2];
var输出=numberArray.reduce(函数(prev,current){return prev.concat(current)}).reduce(函数(prev,current){return prev+current});

document.body.innerHTML+=输出在此上下文中尝试使用嵌套的
reduce

var numberArray = [[1,5,12],[1,-1], [5,11,45,-3],[0,1,2]]
var x = numberArray.reduce(function(a, b) {
    return a + b.reduce(function(c,d){
       return c + ((d > 0) ? d : 0);
    }, 0);
}, 0);
console.log(x); //206
使用两次。
var numberArray=[[1,5,12],[1,-1],[5,11,45,-3],[0,1,2],
sum=numberArray.reduce(函数(r,a){
返回a.reduce(函数s,b){
返回b>0?s+b:s;
},r);
}, 0);

文件。填写(金额)降低标记但没有理由?我没有想到使用嵌套的.reduce@是的。如果您在reduce内部进行concat,那么这也将被视为一次迭代。因此
NxN+N
将成为运行时间。但是如果使用嵌套的reduce,运行时间将是
NxN
。在使用函数编程特性时,我们必须考虑性能。