如何创建一个与 Microsoft excel sumproduct 相同的函数

how to create a function that works same as microsoft excel sumproduct

我正在尝试在 javascript 中重新创建 excel sumproduct 函数,但我不能完全这样做,因为我不完全知道它是如何计算数组的乘积和的并在条件通过时提供合乎逻辑的结果。我也在找一个总结来描述它的逻辑,但我只能找到使用它的方法。

我可以完成对数组乘法结果求和的部分,但我想在通过逻辑条件时包含 return 逻辑结果的能力

乘法代码如下:

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;

}

您可以将回调函数作为函数的第一个参数传递

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))

在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 )