Array.prototype.reverse
содержимое массива на месте (с мутацией)...
Существует ли такая же простая стратегия для обращения массива без изменения содержимого исходного массива (без мутации)?
Array.prototype.reverse
содержимое массива на месте (с мутацией)...
Существует ли такая же простая стратегия для обращения массива без изменения содержимого исходного массива (без мутации)?
Вы можете использовать slice(), чтобы сделать копию, а затем перевернуть() ее
var newarray = array.slice().reverse();
var array = ['a', 'b', 'c', 'd', 'e'];
var newarray = array.slice().reverse();
console.log('a', array);
console.log('na', newarray);
В ES6:
const newArray = [...array].reverse()
Еще один вариант ES6:
Мы также можем использовать .reduceRight()
для создания обращенного массива без его реверсирования.
let A = ['a', 'b', 'c', 'd', 'e', 'f'];
let B = A.reduceRight((a, c) => (a.push(c), a), []);
console.log(B);
Альтернатива ES6 с использованием .reduce()
и распространением.
const foo = [1, 2, 3, 4];
const bar = foo.reduce((acc, b) => ([b, ...acc]), []);
По сути, он создает новый массив со следующим элементом в foo и распределяет накопленный массив для каждой итерации после b.
[]
[1] => [1]
[2, ...[1]] => [2, 1]
[3, ...[2, 1]] => [3, 2, 1]
[4, ...[3, 2, 1]] => [4, 3, 2, 1]
В качестве альтернативы .reduceRight()
как указано выше, но без мутации .push()
.
const baz = foo.reduceRight((acc, b) => ([...acc, b]), []);
ES6:
const reverseArr = [1,2,3,4].sort(()=>1)
Существует несколько способов реверсирования массива без изменения. Двое из них
var array = [1,2,3,4,5,6,7,8,9,10];
// Using Splice
var reverseArray1 = array.splice().reverse(); // Fastest
// Using spread operator
var reverseArray2 = [...array].reverse();
// Using for loop
var reverseArray3 = [];
for(var i = array.length-1; i>=0; i--) {
reverseArray.push(array[i]);
}
Тест производительности http://jsben.ch/guftu
Попробуйте это рекурсивное решение:
const reverse = ([head, ...tail]) =>
tail.length === 0
? [head] // Base case -- cannot reverse a single element.
: [...reverse(tail), head] // Recursive case
reverse([1]); // [1]
reverse([1,2,3]); // [3,2,1]
reverse('hello').join(''); // 'olleh' -- Strings too!