Суммируйте каждый элемент в диапазоне в Javascript - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь заставить работать мою маленькую функцию, которая складывает каждое число в диапазоне.

Например, когда я вызываю метод следующим образом: sumAll(3,10) он должен делать 3+4+5+6+7+8+9+10

Это работает, если я даю функции целые положительные числа, но если он получает отрицательное число или строку илинапример, массив, он не работает должным образом. Я просто хочу вернуть «ОШИБКА», если предоставленный параметр не является положительным целым числом.

Могу ли я помочь с этим, пожалуйста?Есть ли более элегантный (лучший) способ?

Мой код:

const sumAll = (...args) => {
    let max = Math.max(...args);
    let min = Math.min(...args);

    if ((min < 0) || (!Number.isInteger(min)) || (!Number.isInteger(max)) || (Array.isArray(...args))) {
        return "ERROR";
    }

    let n = (max - min) + 1;

    return ((max + min) * n) / 2;
}

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете использовать формулу Гаусса для получения счетчика от 1 ... n и вычитать подсчет.

Для получения только результата, если это возможно, вы можете добавить проверку на положительные целые числа.

const
    isPositiveInt = v => Number.isInteger(v) && v > 0,
    sumN = n => n * (n + 1) / 2,
    range = (m, n) => isPositiveInt(m) && isPositiveInt(n)
        ? sumN(Math.max(m, n)) - sumN(Math.min(m, n) - 1)
        : 'ERROR';

console.log(range(3, 10));
console.log(range(10, 3));
console.log(range());
console.log(range(3));
console.log(range('', 10));
console.log(range(0.2, 0.3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...