我正在尝试在javascript中重新创建excel sumproduct函数,但我无法完全做到这一点,因为我不完全知道它如何对数组和进行乘法运算,并且如果通过条件也可以提供逻辑结果。我也在寻找一个摘要来描述它的逻辑,但我只能找到使用它的方法。
我可以做一些将数组相乘的结果相加的部分,但我想包括在传递逻辑条件时返回逻辑结果的功能
以下是乘法的代码:
var x = function(y, x) {
let len=y.length, sum=0; product=0;
if(y.length==x.length) {
for(i=0;i<len;i++)
{
product=y[i]*x[i];
sum+=product;
}
return sum;
}
else return 0;
}
答案 0 :(得分:0)
您可以将回调函数作为函数的第一个参数传递
const SUMPRODUCT = (callback, ar1, ar2) => {
if(ar1.length !== ar2.length)
throw new RangeError()
let sum = 0
for(i=0; i<ar1.length; i++){
if(callback(ar1[i], ar2[i]))
sum += ar1[i] * ar2[i]
}
return sum
}
const x = [-5, 12, -7, 0, 10]
const y = [50, 2, 120, 87, 14]
console.log(SUMPRODUCT((x, y) => x > 0, x, y))
答案 1 :(得分:0)
在Excel = SUMPRODUCT( A1:A3 * (B1:B3 > 4) )
中与:
= A1 * (B1 > 4) + A2 * (B2 > 4) + A3 * (B3 > 4)
在JavaScript中,可以通过简单的for循环来实现:
var a = [1, 2, 3], b = [4, 5, 6]
for (var sum = 0, i = 0; i < a.length; i++)
sum += a[i] * (b[i] > 4)
console.log( sum )
或使用通用数组reduce
方法:
var a = [1, 2, 3], b = [4, 5, 6]
var sum = a.reduce((s, v, i) => s + v * (b[i] > 4), 0)
console.log( sum )