Как заменить for loop => с помощью таких методов, как map (), filter () или reduce ()
Алгоритм
const sumAll = (arr) => {
let sum = 0
if (arr[0] > arr[1]) [arr[0], arr[1]] = [arr[1], arr[0]]
for( let i = arr[0]; i <= arr[1] ; i ++) sum += i
// replace for loop
return sum
}
console.info(sumAll([1, 4]));
console.info(sumAll([10, 5]));Прочтите о методах массива в MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Первый пример на странице: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Я пробовал код с фильтром, но я не могу проверить условие для min и max этого массива, я не знаю, как установить, что i должно быть меньше arr [1] (max) в этом методе
вы можете использовать n*(n+1)/2 для решения этой проблемы. не нужны никакие map(), reduce() или filter()
Я до сих пор не понимаю твою идею, Атик.
Вот отвечать без цикла.
У меня проблема с упражнением по коду. Я не хочу использовать цикл for и while, как это исправить? Рекомендую использовать ES6
Вот мой код jsfiddle.net/Phuocding/vjtn72pe



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Формула суммы Гаусса для треугольное число, где все числа от 1 до n похожи на n * (n + 1) / 2. тогда вам нужно вычесть всю предыдущую найденную сумму 1 ... n - 1.
+---- 10 ---+ +------- 45 --------+ | | | | 1 2 3 4 5 6 7 8 9 10 | | +------ 15 -----+ | | +---------------- 55 ---------------+
function sumAll(array) {
var min = Math.min(...array),
max = Math.max(...array);
return max * (max + 1) / 2 - (min - 1) * min / 2;
}
console.info(sumAll([1, 4]));
console.info(sumAll([10, 5]));С помощью сокращения с помощью для создания временного массива.
function sumAll(array) {
var min = Math.min(...array),
max = Math.max(...array),
array = Array.from({ length: max - min + 1 }, (_, i) => min + i);
return array.reduce((a, b) => a + b);
}
console.info(sumAll([1, 4]));
console.info(sumAll([10, 5]));Я не рекомендую использовать min-max: ((
Зачем? вы можете заменить его, используя свой подход подкачки.
Спасибо за вашу поддержку, я пытаюсь найти что-то еще новое. :). Эти способы так популярны.
Вы можете использовать Array.apply() и map(), а затем reduce(), если действительно хотите.
const sumAll = (arr) => {
if (arr[0] > arr[1]) [arr[0], arr[1]] = [arr[1], arr[0]]
/*No idea why I am doing it :(*/
return Array.apply(null, Array(arr[1] - arr[0] + 1)).map((_, i) => arr[0] + i).reduce((e,s) => e+s,0);
}
console.info(sumAll([1, 4]));
console.info(sumAll([10, 5]));Спасибо, пытаюсь понять. Это круто.
Вы что-нибудь пробовали?