如何创建与Microsoft Excel sumproduct相同的功能

时间:2019-06-20 18:08:13

标签: javascript excel sumproduct

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

}

2 个答案:

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