IT박스

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

itboxs 2020. 6. 10. 22:52
반응형

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


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

유용한 자료 :


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

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


es6 :

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

참고 URL : https://stackoverflow.com/questions/30610523/reverse-array-in-javascript-without-mutating-original-array

반응형