Как заменить for loop => с помощью таких методов, как map (), filter () или reduce ()

Вот мой код !!!

Как заменить 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]));

Вы что-нибудь пробовали?

Sebastian Simon 04.04.2018 11:03

Прочтите о методах массива в MDN: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Máté Safranka 04.04.2018 11:04

Первый пример на странице: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Robby Cornelissen 04.04.2018 11:04

Я пробовал код с фильтром, но я не могу проверить условие для min и max этого массива, я не знаю, как установить, что i должно быть меньше arr [1] (max) в этом методе

phuocding 04.04.2018 11:06

вы можете использовать n*(n+1)/2 для решения этой проблемы. не нужны никакие map(), reduce() или filter()

atiq1589 04.04.2018 11:09

Я до сих пор не понимаю твою идею, Атик.

phuocding 04.04.2018 11:11

Вот отвечать без цикла.

Durga 04.04.2018 11:11

У меня проблема с упражнением по коду. Я не хочу использовать цикл for и while, как это исправить? Рекомендую использовать ES6

phuocding 05.04.2018 06:35

Вот мой код jsfiddle.net/Phuocding/vjtn72pe

phuocding 05.04.2018 06:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
268
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать Формула суммы Гаусса для треугольное число, где все числа от 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: ((

phuocding 04.04.2018 11:16

Зачем? вы можете заменить его, используя свой подход подкачки.

Nina Scholz 04.04.2018 11:18

Спасибо за вашу поддержку, я пытаюсь найти что-то еще новое. :). Эти способы так популярны.

phuocding 04.04.2018 11:21

Вы можете использовать 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]));

Спасибо, пытаюсь понять. Это круто.

phuocding 04.04.2018 11:22

Другие вопросы по теме