Является ли `Array.prototype.reduceRight` идентичным` reverse`, за которым следует `redu`? - PullRequest
1 голос
/ 17 марта 2020

Array.prototype.reduceRight уменьшает массив до одного значения, работая справа налево (т.е. начиная с конца массива).

Вызывает reduceRight точно так же, как звонить reverse с последующим reduce? Если так, то почему reduceRight существует?

Ответы [ 3 ]

3 голосов
/ 17 марта 2020

Как уже упоминалось, это не то же самое. Вот еще два варианта использования, в которых эти две версии ведут себя по-разному:

  • Все, что основано на индексе (третий аргумент функции обратного вызова, вызываемой как reduce, так и reduceRight ) может вести себя по-разному.

  • Обратные циклы часто используются при изменении массива original . В зависимости от конкретного варианта использования, это может работать с reduceRight, но прерываться с reduce.

3 голосов
/ 17 марта 2020

Array#reduceRight - это , а не то же, что и Array#reverse() -> Array#reduce(). Вот ключевая разница .reduce() / .reduceRight() Не изменяйте начальный массив:

const arr = ["a", "b", "c"];

const combine = arr.reduceRight((a, b) => a+b, "");

console.log(combine);
console.log(arr);

Однако .reverse() делает:

const arr = ["a", "b", "c"];

const combine = arr.reverse().reduce((a, b) => a+b, "");

console.log(combine);
console.log(arr);

Есть также вопрос к производительности - .reverse потребует дополнительной обработки O(n) для обращения массива на месте, то есть поверх .reduce() который уже работает на O(n). Да, окончательная сложность все еще равна O(n) (мы игнорируем константы), но один проход через массив быстрее.

1 голос
/ 17 марта 2020

Уже упоминалось, что .reverse() изменяет начальный массив,

Кроме того, согласно spe c:

https://tc39.es/ecma262/#sec -array.prototype.reduce

https://tc39.es/ecma262/#sec -array.prototype.reduceright

Реализации немного отличаются.

Позвольте мне разрешить аналогию с .push() и .unshift() - они делают то же самое, вставляя элемент в массив, мы много используем pu sh, и довольно редко снимаем, но время от времени появляются некоторые идеальные моменты как для unshift, так и для reduceright

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...