Array.prototype.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;
}