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所请求的这种简单的功能实现中,优选功能方法(其趋于更简洁).
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)
其他答案几乎肯定更有效,但只是给你一个递归的观点(它在其他一些语言中更好).它确实假设两个数组的长度相等,因为如果它们没有指定该怎么做.
function sumProducts(array1, array2) {
if(array1.length)
return array1.pop() * array2.pop() + sumProducts(array1, array2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
katspaugh建议翻转那些效率稍高一点的回报(不必!长度).
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 在这里
| 归档时间: |
|
| 查看次数: |
37918 次 |
| 最近记录: |