我想添加两个具有相同长度的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]}
但我想知道是否有内置代码可以执行此操作。
答案 0 :(得分:10)
使用 Array#map()
方法
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;
对于最新的浏览器,请使用ES6 arrow function
var array1 = [1, 2, 3];
var array2 = [4, 1, 0];
var array3 = array1.map((v, i) => v + array2[i])
console.log(array3);
&#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)
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;
IE8 支持:
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;