как создать функцию, которая работает так же, как Microsoft Excel Excel - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь воссоздать функцию sumproduct excel в javascript, но я не в полной мере могу это сделать, поскольку не знаю точно, как она работает как для умножения сумм массивов, так и для получения логических результатов при выполнении условий. Я также ищу резюме, чтобы описать его логику, но я могу только найти способы использовать его.

Я могу сделать часть, которая суммирует результат умножения массива, но я хочу включить возможность возвращать логические результаты, когда ему передаются логические условия

Вот код для умножения:

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 голосов
/ 02 июля 2019

В 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 )
0 голосов
/ 20 июня 2019

Вы можете передать функцию обратного вызова в качестве первого аргумента вашей функции

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