-1

我正在尝试在 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;

}
4

2 回答 2

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 )

于 2019-07-02T17:27:37.443 回答
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))

于 2019-06-20T18:38:28.820 回答