javascript에서 배열의 요소를 어떻게 설정 해제합니까?


138

'bar'가 표시되지 않도록 배열 foo에서 'bar'키를 제거하는 방법

for(key in foo){alert(key);}

답변:


243

사용하지 마십시오 삭제 그 다음 배열의 길이에 제대로 반영되지 않습니다 정의되지 않은으로 만 설정할 것 배열에서 요소를 제거하지 않으므로.

당신이 키를 알고 있다면 당신은 사용해야 스플 라이스 즉,

myArray.splice(key, 1);

Steven의 입장에있는 사람에게는 다음과 같이 시도 할 수 있습니다.

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

또는

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1 좋은 지적, 나는 또한 이런 식으로 좋아한다 : ejohn.org/blog/javascript-array-remove
CMS

3
@ThiefMaster-설명이 필요하세요? 나는 그것이 무엇을 의미하는지 배우고 싶어하지 않습니다. 언제나 그렇듯이 편집 내용은 일반 의견보다 1,000,000 배 더 좋습니다. 당신은 당신이 가진 담당자의 금액으로 알고 있어야합니다.
가는

21
for (var key in myArray)대신 사용하십시오 for (key in myArray)-그렇지 않으면 key전역 변수이며 동일한 문제가있는 루프 내에서 함수를 호출하면 예기치 않은 결과가 발생합니다.
ThiefMaster

2
배열에 'bar'와 일치하는 행에 여러 항목이있는 경우 두 번째 예는 작동하지 않습니다. 배열의 인덱스가 이동하고 항목의 절반이 스 플라이 싱되지 않습니다. 대신, 일치하는 것이 발견되면 색인을 감소시키는 for 루프를 사용하십시오.
Dave Lancea


52
delete foo[key];

:디


4
기술적으로 그것은 질문에 대답하지 않습니다. 키 '막대기'를 제거하려고합니다. 그리고 핵심 변수는 그것을 암시하지 않습니다. : P
Kon

4
key = 'bar'; eval ( "delete foo."+ key); 가죽 D;
olliej

3
마십시오 하지 사용 eval. 객체 / 배열의 키 / 인덱스 삭제는를 사용하지 않는 훨씬 간단한 방법으로 달성 할 수 있습니다 eval.
Dinei

4
실제로 삭제 foo [key]에 의해 인덱스 배열에서 제거하면 foo [key] = undefined에 값이 저장되고 foo.length는 잘못된 것으로 유지됩니다. 대신 사용 SPLICE 그래서
Павел Иванов

delete foo [key] 잘못된 것을 사용하십시오; foo.splice (key, 1)를 사용해야합니다.
vnguyen

38

중요 사항 : JavaScript Array는 PHP에서 익숙한 것과 같은 연관 배열이 아닙니다. "배열 키"가 문자열이면 더 이상 배열의 내용을 조작하지 않습니다. 배열은 객체이며 대괄호 표기법을 사용하여 <key name>이라는 멤버에 액세스합니다. 그러므로:

var myArray = [];
myArray [ "bar"] = true;
myArray [ "foo"] = true;
alert (myArray.length); // 0을 반환합니다.

배열에 요소를 추가하지 않았기 때문에 myArray의 bar 및 foo 멤버 만 수정했습니다.


37

키 이름을 알고 있다면 다음과 같이하십시오.

delete array['key_name']

2
이것은 배열이 아닙니다! 그것은 객체입니다 (예, JS에서는 연관 배열이라고하지만 실제로는 아닙니다.이 방법은 JS 배열로 완전히 작업하면 해 롭습니다).
wintercounter

3

이것이 내가하는 방법입니다

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Array.prototype.indexOf () 메서드는 키가 아닌 배열 내 값을 검색합니다. 따라서 이것은 작동하지 않습니다.
Nadav

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.