Как написать одну функцию с именем `добавить`.Так что, получив 2 аргумента, он возвращает сумму 2 значений. - PullRequest
0 голосов
/ 06 февраля 2019

Как написать одну функцию с именем add.Таким образом, получив 2 аргумента, он возвращает сумму 2 значений.Предположим, что все значения являются числами .:

например // add (1, 2) = 3

// add (1) (2) = 3

//add () (1) () (2) = 3

// add () (1) (2) = 3

Ответы [ 5 ]

0 голосов
/ 06 февраля 2019

Я пытался

function calcSum(a,b){ var ab = function (b) { return a+b; } if(typeof a == 'undefined'){ return ab; } if(typeof b == 'undefined'){ return ab; } else { return ab(b); } }

Это выглядит не так уж плохо - это работает для calcSum(1,2) и calcSum(1)(2).Однако вы неправильно обрабатываете случаи, когда ничего (или undefined) не передано:

  • calcSum() должно возвращать функцию, которая все еще ожидает два аргумента
  • calcSum(1)() = ab() должен вернуть функцию, которая все еще ожидает один аргумент

Вы уже сопоставили первый случай, но вы вернули ab (который принимает только одно значение) вместо calcSum (функция, которая будет принимать два значения).Чтобы это исправить, используйте

function calcSum(a,b){
    var ab = function(b) {
        if (typeof b == 'undefined') return ab;
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        else return a+b;
    }
    if (typeof a == 'undefined') return calcSum;
//                                      ^^^^^^^^
    if (typeof b == 'undefined') return ab; // actually you don't need this, ab(b) already handles this case as well now
    else return ab(b);
}
0 голосов
/ 06 февраля 2019
const add = (...toAddArr) => {
    let result = 0;
    for (let toAddNr of toAddArr) {
        result += toAddNr;
    }
    return result;
}

console.log (add (1, 2, 3, 4, 5));

В этом примере используется оператор rest для получения неограниченных аргументов и передачи его какмассив и for / of loop для итерации по нему.

0 голосов
/ 06 февраля 2019
let add = (...a)=>a.length==2 ? a[0]+a[1] : (...b)=>add(...a.concat(b));

Идея проста ... мы объявляем функцию с переменным числом, и если мы получили два элемента, то мы закончили (и возвращаем сумму), в противном случае мы возвращаем новую функцию с переменным числом, которая соберет больше элементов и вызоветсама функция рекурсивно передает то, что уже a объединено с новыми элементами b.

0 голосов
/ 06 февраля 2019

Что вы думаете об этом предложении:

function add(){
  return Array.from(arguments).reduce((accumulator, currentValue) => accumulator + currentValue)
}

// you can also add as many argument you want.
const b = add(1,2,3,4); // 10
0 голосов
/ 06 февраля 2019

Слишком просто:

 const curry = (fn, ...previous) => (...args) => args.length + previous.length >= fn.length ? fn(...previous, ...args) : curry(fn, ...previous, ...args);

 const add = curry((a, b) => a + b);
...