[javascript] 원래 배열을 변경하지 않고 Javascript로 배열을 뒤집습니다.

Array.prototype.reverse (돌연변이로) 배열의 내용을 뒤집습니다.

원래 배열의 내용을 변경하지 않고 (돌연변이없이) 배열을 뒤집는 비슷한 전략이 있습니까?



답변

당신은 사용할 수 있습니다 slice ()를 복사 한 다음 수 있도록 () 역

var newarray = array.slice().reverse();


답변

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);

유용한 자료 :


답변

이 재귀 솔루션을 사용해보십시오.

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!                              


답변

사용 .reduce()및 확산 의 ES6 대안 .

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]), []);


답변

수정하지 않고 배열을 뒤집는 방법에는 여러 가지가 있습니다. 그들 중 두

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


답변

일반 자바 스크립트로 :

function reverseArray(arr, num) {
  var newArray = [];
  for (let i = num; i <= arr.length - 1; i++) {
    newArray.push(arr[i]);
  }

  return newArray;
}