Подтвердить что ты не робот

Обратный массив в Javascript без изменения исходного массива

Array.prototype.reverse содержимое массива на месте (с мутацией)...

Существует ли такая же простая стратегия для обращения массива без изменения содержимого исходного массива (без мутации)?

4b9b3361

Ответ 1

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

Ответ 2

В ES6:

const newArray = [...array].reverse()

Ответ 3

Еще один вариант ES6:

Мы также можем использовать .reduceRight() для создания обращенного массива без его реверсирования.

let A = ['a', 'b', 'c', 'd', 'e', 'f'];

let B = A.reduceRight((a, c) => (a.push(c), a), []);

console.log(B);

Ответ 4

Альтернатива 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]), []);

Ответ 5

ES6:

const reverseArr = [1,2,3,4].sort(()=>1)

Ответ 6

Существует несколько способов реверсирования массива без изменения. Двое из них

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

Ответ 7

Попробуйте это рекурсивное решение:

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!