[javascript] JavaScript에서 배열을 비우려면 어떻게합니까?

배열을 비울 수있는 방법이 .remove()있습니까? 그렇다면 가능 합니까?

예를 들어

A = [1,2,3,4];

어떻게 비울 수 있습니까?



답변

기존 배열을 지우는 방법 A:

방법 1

(이것은 질문에 대한 원래의 대답이었습니다)

A = [];

이 코드는 변수 A를 새로운 빈 배열로 설정합니다 . 이것은 실제로 새로운 배열을 생성하기 때문에 다른 곳 에서 원래 배열에 대한 참조A 가 없으면 완벽합니다 . 다른 변수 나 속성에서이 배열을 참조한 경우 원래 배열은 변경되지 않으므로이 방법에주의해야합니다. 원래 변수로만 배열을 참조하는 경우에만 사용하십시오A .

이것은 또한 가장 빠른 솔루션입니다.

이 코드 샘플은이 방법을 사용할 때 발생할 수있는 문제를 보여줍니다.

var arr1 = ['a','b','c','d','e','f'];
var arr2 = arr1;  // Reference arr1 by another variable 
arr1 = [];
console.log(arr2); // Output ['a','b','c','d','e','f']

방법 2 (같은 제안 에 의해 매튜 Crumley )

A.length = 0

길이를 0으로 설정하여 기존 배열을 지 웁니다. 일부는 이것이 모든 JavaScript 구현에서 작동하지 않을 수도 있다고 주장하지만, 그렇지 않은 것으로 밝혀졌습니다. 배열의 길이 속성은 읽기 / 쓰기 속성이므로 ECMAScript 5에서 “엄격 모드”를 사용할 때도 작동합니다.

방법 3 (같은 제안 에 의해 안토니 )

A.splice(0,A.length)

사용 .splice()은 완벽하게 작동하지만 .splice()함수는 제거 된 모든 항목이 포함 된 배열을 반환하므로 실제로 원래 배열의 복사본을 반환합니다. 벤치 마크에서는 이것이 성능에 영향을 미치지 않는다고 제안합니다.

방법 4 (같은 제안 에 의해 tanguy_k )

while(A.length > 0) {
    A.pop();
}

이 솔루션은 간결하지 않으며 원래 답변에서 참조 된 이전 벤치 마크와 달리 가장 느린 솔루션입니다.

공연

기존 배열 을 지우는 모든 방법 중에서 방법 2와 3은 성능면에서 매우 유사하며 방법 4보다 훨씬 빠릅니다 . 이 벤치 마크를 참조하십시오 .

아래 답변 에서 Diadistis 가 지적한 것처럼 위에서 설명한 네 가지 방법의 성능을 결정하는 데 사용 된 원래 벤치 마크에 결함이있었습니다. 원래 벤치 마크는 지워진 배열을 재사용하여 두 번째 반복에서 이미 비어있는 배열을 지 웁니다.

다음 벤치 마크 수정이 결함 : http://jsben.ch/#/hyj65 . 그것은 방법 # 2 (길이 속성)와 # 3 (접합)이 가장 빠르다는 것을 분명히 보여줍니다 (원래 배열을 변경하지 않는 방법 # 1을 세지 않음)


이것은 화제가되고 논란의 원인이되었습니다. 실제로 많은 정답이 있으며이 답변이 오랫동안 허용 된 답변으로 표시되어 있으므로 여기에 모든 방법을 포함하겠습니다. 이 답변에 투표하면 내가 언급 한 다른 답변도 찬성하십시오.


답변

업데이트해야 할 다른 참조가 있기 때문에 원래 배열을 유지해야하는 경우 길이를 0으로 설정하여 새 배열을 만들지 않고 지울 수 있습니다.

A.length = 0;


답변

동일한 배열유지 하면서 가장 빠르게 작동하는 구현 ( “변경 가능”) :

function clearArray(array) {
  while (array.length) {
    array.pop();
  }
}

참고로 단순화 할 수 없습니다 while (array.pop()) 다음과 . 테스트가 실패합니다.

참고로 MapSet define clear(), Array에clear() 대해 논리적으로 보입니다. 도.

TypeScript 버전 :

function clearArray<T>(array: T[]) {
  while (array.length) {
    array.pop();
  }
}

해당 테스트 :

describe('clearArray()', () => {
  test('clear regular array', () => {
    const array = [1, 2, 3, 4, 5];
    clearArray(array);
    expect(array.length).toEqual(0);
    expect(array[0]).toEqual(undefined);
    expect(array[4]).toEqual(undefined);
  });

  test('clear array that contains undefined and null', () => {
    const array = [1, undefined, 3, null, 5];
    clearArray(array);
    expect(array.length).toEqual(0);
    expect(array[0]).toEqual(undefined);
    expect(array[4]).toEqual(undefined);
  });
});

업데이트 된 jsPerf : http://jsperf.com/array-destroy/32 http://jsperf.com/array-destroy/152


답변

브라우저 간 친숙하고 최적의 솔루션은 다음과 같이이 방법을 사용 splice하여 배열 A의 내용을 비우는 것입니다.

A.splice(0, A.length);


답변

지금까지 2739 개 이상의 찬성 투표가 오해의 소지가 있거나 잘못되었습니다.

문제는 “기존 배열을 어떻게 비우나요?”입니다. 예를 들어 A = [1,2,3,4].

  1. “말하기A = [] 답이다” 것은 무지하고 절대적으로 틀립니다. [] == []이다 거짓 .

    이것은이 두 배열이 두 개의 분리 된 개별 개체이기 때문에 두 개의 고유 한 ID를 가지며 각각 디지털 세계에서 고유 한 공간을 차지하기 때문입니다.


엄마가 쓰레기통을 비우라고한다고 가정 해 봅시다.

  • 요청한 것을 마치 마치 새로운 것을 가져 오지 않습니다.
  • 대신 휴지통을 비 웁니다.
  • 채워진 것을 새 빈 캔으로 교체하지 않고 채워진 캔에서 레이블 “A”를 가져 가지 않고 새 캔에 붙입니다. A = [1,2,3,4]; A = [];

배열 객체를 비우는 것이 가장 쉬운 방법입니다.

A.length = 0;

이런 식으로 “A”아래의 캔은 비어있을뿐만 아니라 새 것처럼 깨끗합니다!


  1. 또한 캔이 비워 질 때까지 손으로 쓰레기를 제거 할 필요가 없습니다! 다음과 같이 캔을 비울 때까지 기존 쓰레기통을 완전히 비워달라고 요청했습니다.

    while(A.length > 0) {
        A.pop();
    }
  2. 또한 왼손을 휴지통의 맨 아래에 놓고 맨 오른쪽을 잡고 다음과 같이 내용물을 꺼낼 수 있습니다.

    A.splice(0, A.length);

아니요, 비워 달라는 요청을 받았습니다.

A.length = 0;

이것은 주어진 JavaScript 배열의 내용을 올바르게 비우는 유일한 코드입니다.


답변

성능 테스트:

http://jsperf.com/array-clear-methods/3

a = []; // 37% slower
a.length = 0; // 89% slower
a.splice(0, a.length)  // 97% slower
while (a.length > 0) {
    a.pop();
} // Fastest


답변

배열을 “삭제”할 수 있도록 이것을 JavaScript 파일에 추가 할 수 있습니다.

Array.prototype.clear = function() {
    this.splice(0, this.length);
};

그런 다음 다음과 같이 사용할 수 있습니다.

var list = [1, 2, 3];
list.clear();

또는 무언가를 파괴하지 않으려면 다음을 수행하십시오.

if (!Array.prototype.clear) {
    Array.prototype.clear = function() {
       this.splice(0, this.length);
    };
}

많은 사람들이 Array와 같은 기본 객체를 수정해서는 안된다고 생각하며 동의합니다. 처리 방법을 결정할 때주의하십시오.