Javascript:乘法和求和两个数组

Caf*_*eek 6 javascript arrays math

我有两个相等长度的数组,我需要在每个数组中乘以相应的(按索引)值,并对结果求和.

例如

var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];
Run Code Online (Sandbox Code Playgroud)

会导致34(4*2 + 3*3 + 4*3 + 5*1).

写这个最简单的方法是什么?

Buc*_*uck 14

var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];
console.log(arr1.reduce(function(r,a,i){return r+a*arr2[i]},0));
34
Run Code Online (Sandbox Code Playgroud)

这显示了"功能"方法而不是用于计算两个向量的点积的"命令性"方法.在OP所请求的这种简单的功能实现中,优选功能方法(其趋于更简洁).

  • 请解释为什么这有助于OP (2认同)

Rya*_*rty 10

var sum = 0;
for(var i=0; i< arr1.length; i++) {
    sum += arr1[i]*arr2[i];
}
Run Code Online (Sandbox Code Playgroud)

  • 第二行也可以写成`for(var i = 0; i <arr1.length; sum + = arr1 [i]*arr2 [i],i ++);` (8认同)

End*_*age 5

其他答案几乎肯定更有效,但只是给你一个递归的观点(它在其他一些语言中更好).它确实假设两个数组的长度相等,因为如果它们没有指定该怎么做.

function sumProducts(array1, array2) {
    if(array1.length) 
        return array1.pop() * array2.pop() + sumProducts(array1, array2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

katspaugh建议翻转那些效率稍高一点的回报(不必!长度).


Suh*_*ari 5

var a = [1,2,3,4,5];
var b = [5,4,3,2,1];

a.map(function(x, index){ //here x = a[index]
 return b[index] + x 
});

=>[6,6,6,6,6]

//if you want to add the elements of an array:

a.reduce(function(x, y){
 return x + y
});

=>15
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关Array.map的信息。和Array.reduce 在这里