Array.prototype.reverse
инвертирует содержимое массива на месте (с мутацией) ...
Существует ли такая же простая стратегия обращения массива без изменения содержимого исходного массива (без мутации)?
javascript
arrays
sfletche
источник
источник
Ответы:
Вы можете использовать slice (), чтобы сделать копию, а затем перевернуть () ее
Показать фрагмент кода
источник
If begin is omitted, slice begins from index 0.
- так же, какarray.slice(0)
В ES6:
источник
[...].reverse
преимущество в очень простом тестовом примере. jsperf.com/reverse-vs-slice-reverse/1.slice
значительно быстрее.slice
, скорее всего, будет быстрее,[...]
потому что b / c - это итеративный массив, поэтому он не может делать столько предположений. Кроме того, вероятно, чтоslice
он лучше оптимизирован, потому что это было давно.Еще один вариант ES6:
Мы также можем использовать
.reduceRight()
для создания обращенного массива, фактически не обращая его.Полезные ресурсы:
Array.prototype.reduceRight()
Arrow Functions
Comma Operator
источник
reduceRight
медленный аф(a, c) => a.concat([c])
чувствует себя более идиоматичным, чем(a, c) => (a.push(c), a)
Попробуйте это рекурсивное решение:
источник
ES6 альтернативное использование
.reduce()
и распространение.По сути, он создает новый массив со следующим элементом в foo и распределяет накопленный массив для каждой итерации после b.
В
.reduceRight()
качестве альтернативы, как упомянуто здесь выше, но без.push()
мутации.источник
Существует несколько способов обращения массива без изменений. Двое из них
Тест производительности http://jsben.ch/guftu
источник
В простой Javascript:
источник
Реверсирование на месте с переменным обменом только для демонстрационных целей (но вам нужна копия, если вы не хотите изменять)
источник
ES6:
источник
1
в конце могло бы быть больше нуля, потому что именно так работаетArray.prototype.sort
обратный вызов (или так называемыйcompare function
). В основном вы всегда сравниваете 2 числа, и в этом случае сравнение возвращает всегда положительное значение, поэтому оно говорит, что всегда переходите ко второму числу перед первым :) это очень объяснительно: stackoverflow.com/questions/6567941/…sort()
мутирует массив (т.е. сортирует его на месте), чего хочет избежать OP.