我想将数字数组的每个值与不同数字数组中的相应值相加,我想这样做而不循环遍历每个单独的值。
所以:
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = [6,8,10,12];
但是,我喜欢一下子做到这一点,而不是这样做:
for(var i = 0; i < array1.length; i++){
sum.push(array1[i] + array2[i]);
}
有人能想到办法吗?我很难过。
答案 0 :(得分:42)
我知道这是一个古老的问题,但我只是和某人讨论这个问题而我们想出了另一个解决方案。您仍然需要一个循环,但您可以使用Array.prototype.map()完成此操作。
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = array1.map(function (num, idx) {
return num + array2[idx];
}); // [6,8,10,12]
答案 1 :(得分:8)
var arr = [1,2,3,4];
var arr2 = [1,1,1,2];
var squares = arr.map((a, i) => a + arr2[i]);
console.log(squares);
答案 2 :(得分:3)
您无法避免循环,但您可以执行此操作并使用Array.prototype
向所有Array对象添加函数。
以下是示例:
// Add a SumArray method to all arrays by expanding the Array prototype(do this once in a general place)
Array.prototype.SumArray = function (arr) {
var sum = [];
if (arr != null && this.length == arr.length) {
for (var i = 0; i < arr.length; i++) {
sum.push(this[i] + arr[i]);
}
}
return sum;
}
// here's your code
var array1 = [1, 2, 3, 4];
var array2 = [5, 6, 7, 8];
var sum = array1.SumArray(array2);
console.log(sum); // [6,8,10,12]
这是你的Fiddle。
答案 3 :(得分:3)
只要合并波波维奇和两个人的答案。
Array.prototype.SumArray = function (arr) {
var sum = this.map(function (num, idx) {
return num + arr[idx];
});
return sum;
}
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = array1.SumArray(array2);
console.log(sum); // [6,8,10,12]
答案 4 :(得分:2)
对于所有遇到这个问题的初学者,他们可能不具备使用 map/reduce 或三元运算符的水平..
let sum = 0;
let nums = []
for (let i = 0; i < array1.length; i++){
sum = array1[i] + array2[i];
nums.push(sum)
}
return nums
答案 5 :(得分:1)
下面的示例即使在长度变化和更多用例的情况下也能正常工作。查看。如果需要,你也可以进行原型设计。
function sumArray(a, b) {
var c = [];
for (var i = 0; i < Math.max(a.length, b.length); i++) {
c.push((a[i] || 0) + (b[i] || 0));
}
return c;
}
// First Use Case.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4];
console.log( sumArray(a, b) );
// Second Use Case with different Length.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4, 5];
console.log( sumArray(a, b) );
// Third Use Case with undefined values and invalid length.
var a = [1, 2, 3, 4];
var b = [];
b[1] = 2;
b[3] = 4;
b[9] = 9;
console.log( sumArray(a, b) );
答案 6 :(得分:1)
您可以使用Lodash库中的_.unzipWith
方法。
var array1 = [1, 2, 3, 4];
var array2 = [5, 6, 7, 8];
var array = [array1, array2];
console.log(_.unzipWith(array, _.add));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
答案 7 :(得分:1)
这是一个通用的解决方案,用于处理长度可能不同的N个数组。
它使用Array.prototype.reduce(),Array.prototype.map(),Math.max()和Array.from():
function sumArrays(...arrays) {
const n = arrays.reduce((max, xs) => Math.max(max, xs.length), 0);
const result = Array.from({ length: n });
return result.map((_, i) => arrays.map(xs => xs[i] || 0).reduce((sum, x) => sum + x, 0));
}
console.log(...sumArrays([0, 1, 2], [1, 2, 3, 4], [1, 2])); // 2 5 5 4
答案 8 :(得分:1)
另一种方法可能就是这样
La suma es
2333333322
在这种情况下,var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = [...array1].map((e,i)=> e+array2[i]); //[6,8,10,12]
与[...array1]
相同
答案 9 :(得分:1)
在ES6 +中,您可以使用 arrow function 使代码清晰:
var x = [1,2,3];
var y = [2,3,4];
var sum = x.map( (val, i) => val + y[i] );
console.log(sum); //Array [3, 5, 7]
var z = [3,4,5];
var add3 = x.map( (val, i) => val + y[i] + z[i] );
console.log(add3); //Array [6, 9, 12]
答案 10 :(得分:0)
您可以使用某些功能样式进行操作:
const a = [1,2,3]
const b = [4,5,6]
const f= a.concat(b).map((v,i,arr)=>{
if ( i<arr.length) return v+arr[i+arr.length/2]
}).filter(n=>!isNaN(n))
console.log(f)
答案 11 :(得分:0)
此示例将使用不同的长度变化:
let getSum = (arr1, arr2) => {
let main = arr1.length >= arr2.length ? arr1 : arr2;
let sec = arr1.length < arr2.length ? arr1 : arr2;
return main.map((elem, i) => sec[i] ? elem + sec[i] : elem)
}
答案 12 :(得分:0)
使用函数式编程在一行中对N个长度可能不同的数组的通用解决方案;)
const sumArrays = as => as.filter(a => a.length).length ? [as.filter(a => a.length).reduce((r, a) => r + a.shift(), 0), ...sumArrays(as)] : [] console.log(sumArrays([[1, 2, 3], [100], [11, 22, 33, 44], []]))
答案 13 :(得分:0)
上述所有答案都是正确的,
使用reduce。我只想补充一下我的答案可能很简单而且有用。
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
const reducer = (accumulator, currentValue, index, array) => {
let val = currentValue + array2[index];
accumulator.push(val);
return accumulator;
}
console.log(array1.reduce(reducer, []));
谢谢..