programing

원래 어레이를 변환하지 않고 Javascript에서 리버스 어레이

copysource 2022. 9. 18. 16:20
반응형

원래 어레이를 변환하지 않고 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유틸리티 라이브러리를 사용할 수 있는 확실한 근거가 있습니다.

때 사용 는 다음과 같습니다.pipefp-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

반응형