简体   繁体   English

JavaScript中的求和数组

[英]Sum arrays in javascript

I have these arrays: 我有这些数组:

// I want to calculate these arrays each other.
var a = [1,2,3]
var b = [1,2,3]
var c = [3,4,5]
// ->
var result = [5, 8, 11]

I can calculate two array with below method but how can I sum n arrays? 我可以使用以下方法计算两个数组,但如何求和n个数组呢?

Array.prototype.Sum = function (arr) {
    var s = [];
    if (arr != null && this.length == arr.length) {
        for (var i = 0; i < arr.length; i++) {
            var c = this[i] + arr[i]
            s.push(c);
        }
    }
    return s;
}

Assuming 假设

var arrays = [
    [1,2,3],
    [1,2,3],
    [3,4,5]
];

Using your Sum with EcmaScript 5 array methods, Sum与EcmaScript 5数组方法结合使用,

var result = arrays.reduce(function(arr1, arr2){
    return arr1.Sum(arr2);
});

Alternatively, consider not polluting Array.prototype and just using something like (ES5) 另外,请考虑不污染Array.prototype而只使用类似(ES5)的东西

var result = arrays.reduce(function(arr1, arr2) {
    return arr1.map(function(num, index){
        return num+arr2[index];
    });
});

Or, simplifying using EcmaScript 6 arrow functions, 或者,简化使用EcmaScript 6箭头功能,

var result = arrays.reduce(
    (arr1, arr2) => arr1.map(
        (num, index) => num+arr2[index]
    )
);

With this function, you can sum several arrays and you don't need to "encapsulate" your arrays into another array... 使用此功能,您可以求和多个数组,而无需将数组“封装”为另一个数组...

Also, it works on old browsers. 此外,它还可以在旧的浏览器上使用。

function Sum(){
  if (arguments.length == 0){
    return null;
  }
  var s = arguments[0];
  for(var j = 1; j < arguments.length; j++) {
     var arr = arguments[j];
     for (var i = 0; i < arr.length; i++) {
         s[i] = s[i] + arr[i];
     }
  }
  return s;
}

Just call Sum(a, b) or Sum(a, b, c) ... 只需调用Sum(a, b)Sum(a, b, c) ...

You can put it in your prototype too if you want (and make little changes to use this if you want to sum in place). 你可以把它放在你的原型太多,如果你想要的(并使用变化不大this ,如果你想在地方总和)。

A plain old ECMAScript 3 solution: 一个简单的旧ECMAScript 3解决方案:

var arrays = [
    [1, 2, 3],
    [1, 2, 3],
    [3, 4, 5]
];

function sum() {
  var sum = [];
  for(var i = 0; i < arguments.length; ++i) {
    for(var j = 0; j < arguments[i].length; ++j)
      sum[j] = (sum[j] || 0) + arguments[i][j];
  } return sum;
}

sum.apply(this, arrays);              // [ 5, 8, 11 ]
sum(arrays[0], arrays[1], arrays[2]); // [ 5, 8, 11 ]
a.sum(b).sum(c);

那应该做。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM