원래 어레이를 변환하지 않고 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!
const newArr = Array.from(originalArray).reverse();
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]), []);
어레이를 변경하지 않고 되돌리는 방법은 여러 가지가 있습니다.그 중 두 개는
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 arrayCopy = Object.assign([], array).reverse()
이 솔루션은 다음과 같습니다.
- 어레이 복사 성공
- 원래 어레이를 변환하지 않습니다.
- 하고 있는 것처럼 보인다.
새로운 TC39 제안서가 등장했습니다.toReversed
to 는 methodArray
어레이의 복사본을 반환하고 원본은 수정하지 않습니다.
제안서의 예:
const sequence = [1, 2, 3];
sequence.toReversed(); // => [3, 2, 1]
sequence; // => [1, 2, 3]
현재 3단계이기 때문에 조만간 브라우저 엔진에 구현될 예정이지만, 그 사이에 폴리필을 사용할 수 있습니다.
원래의 어레이의 내용을 변경하지 않고(변환하지 않고) 어레이를 반전시키기 위한 마찬가지로 간단한 전략이 있습니까?
이렇게 할 수 요.to[Operation]
작업이 적용된 새 컬렉션을 반환합니다(현재 3단계이며 곧 사용할 수 있습니다).
실장은 다음과 같습니다.
const arr = [5, 4, 3, 2, 1];
const reversedArr = arr.toReverse();
console.log(arr); // [5, 4, 3, 2, 1]
console.log(reversedArr); // [1, 2, 3, 4, 5]
데모용으로만 가변 스왑을 사용하여 리버스 가능(단, 변환하지 않으려면 복사본 필요)
const myArr = ["a", "b", "c", "d"];
const copy = [...myArr];
for (let i = 0; i < (copy.length - 1) / 2; i++) {
const lastIndex = copy.length - 1 - i;
[copy[i], copy[lastIndex]] = [copy[lastIndex], copy[i]]
}
한편, 「 」는, 「 」, 「 」의 사이에array.slice().reverse()
내가 도서관을 이용할 수 없는 상황에서 내가 하고 싶은 것이다.을 사용하다우리는 코드를 읽는 사람이 심사숙고해야 하는 명령 논리를 사용하고 있다., 「 」, 「 」에도 것을 하면,sort
유틸리티 라이브러리를 사용할 수 있는 확실한 근거가 있습니다.
때 사용 는 다음과 같습니다.pipe
fp-ts나 제가 직접 쓴 라이브러리에서요.여러 함수를 통해 값을 파이핑합니다.pipe(x, a, b)
와 동등하다b(a(x))
이 기능으로 글을 쓸 수 있습니다.
pipe(yourArray, reverseArray)
어디에reverseArray
이 기능은 기본적으로.slice().reverse()
즉, 어레이를 불변하게 반전시킵니다.일반적으로 말하면pipe
를 사용하면 어레이 프로토타입에서 사용할 수 있는 방법에 국한되지 않고 도트 체인과 동일한 작업을 수행할 수 있습니다.
플레인 Javascript:
function reverseArray(arr, num) {
var newArray = [];
for (let i = num; i <= arr.length - 1; i++) {
newArray.push(arr[i]);
}
return newArray;
}
es6:
const reverseArr = [1,2,3,4].sort(()=>1)
언급URL : https://stackoverflow.com/questions/30610523/reverse-array-in-javascript-without-mutating-original-array
'programing' 카테고리의 다른 글
장고 시험 앱 오류-:Demand을 담은 데이터베이스를 구축을 부인했다고 오류가 테스트 데이터베이스를 만들었는데요. (0) | 2022.09.18 |
---|---|
특정 루트의 Vue 라우터에 여러 에일리어스를 설정할 수 있습니까? (0) | 2022.09.18 |
MySQL에서 SQL 스크립트를 실행하는 방법 (0) | 2022.09.18 |
날짜 개체에 시간을 추가하는 방법 (0) | 2022.09.18 |
Gradle 및 D를 통해 테스트에 시스템 속성을 부여하는 방법 (0) | 2022.09.18 |