如何以成对方式添加两个数组

时间:2016-06-02 12:30:32

标签: javascript arrays

我想添加两个具有相同长度的JavaScript数组的值来获取第三个数组,以便第三个数组的第一个值是两个第一个数组的第一个值的总和,第二个值第三个数组是两个第一个数组的第二个值的总和,等等。例如:

var array1 = [1,2,3];
var array2 = [4,1,0];
var array3 = array1 + array2;

我希望array3的结果为[1+4, 2+1, 3+0] = [5,3,3]

这与this不是同一个问题。我想添加数字而不是制作子数组。

我知道您可以执行for(i = 0; i < array1.length; i++){array3[i] = array1[i] + array2[i]}但我想知道是否有内置代码可以执行此操作。

3 个答案:

答案 0 :(得分:10)

使用 Array#map() 方法

&#13;
&#13;
var array1 = [1, 2, 3];
var array2 = [4, 1, 0];
var array3 = array1.map(function(v, i) {
  return v + array2[i];
})

console.log(array3);
&#13;
&#13;
&#13;

对于最新的浏览器,请使用ES6 arrow function

&#13;
&#13;
var array1 = [1, 2, 3];
var array2 = [4, 1, 0];
var array3 = array1.map((v, i) => v + array2[i])

console.log(array3);
&#13;
&#13;
&#13;

对于较旧的浏览器,请检查polyfill option of map method

答案 1 :(得分:3)

您应该使用generators

function *addPairwise(a1, a2) {
  let i1 = a1[Symbol.iterator](), i2 = a2[Symbol.iterator](), x1, x2;

  while (1) {
    x1 = i1.next();
    x2 = i2.next();
    if (x1.done && x2.done) return;
    yield x1.done ? x2.value : x2.done ? x1.value : x1.value + x2.value;
  }
}

通常我们更喜欢简单地在迭代上执行for...of循环,但是在两个迭代中没有办法并行执行,所以我们需要获取迭代器以便我们可以使用next方法。

这种方法允许你成对地添加任何包含无限流的迭代。

console.log([...addPairwise([1,2,3], [4,1,0])]);

如果您愿意,可以定义addPairwise直接获取迭代器并将其称为

addPairwise([1, 2, 3].values(), [4, 1, 0].values())

这假定适合支持ES6,例如节点v6,Chrome 51或babel。

答案 2 :(得分:-1)

&#13;
&#13;
var array1 = [1,2,3];
var array2 = [4,1,0];

var array3 = add(array1, array2);
console.log(array3);

function add(arr1, arr2) {
  return arr1.map(function(value, index) {
    return value + arr2[index];
  });
}
&#13;
&#13;
&#13;

IE8 支持:

&#13;
&#13;
var array1 = [1,2,3];
var array2 = [4,1,0];

var array3 = add(array1, array2);
console.log(array3);

function add(arr1, arr2) {
  var newArray = [];
  
  for(var i = 0; i < arr1.length; i++){
    newArray.push(arr1[i] + arr2[i]);
  }
  
  return newArray;
}
&#13;
&#13;
&#13;