자바 스크립트의 해시에서 키 + 값을 제거하는 방법


78

주어진

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key2'] = { Name: 'Object 2' };
myHash['key3'] = { Name: 'Object 3' };

key2, 및 object 2해시를 제거 하여 마치 내가 한 것처럼 상태가되도록하는 방법 :

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myHash['key3'] = { Name: 'Object 3' };

삭제는 내가 원하는 작업을 수행하지 않습니다.

delete myHash['key2'] 

간단히 말해 :

var myHash = new Array();
myHash['key1'] = { Name: 'Object 1' };
myhash['key2'] = null;
myHash['key3'] = { Name: 'Object 3' };

유일한 워드 프로세서 나에 찾을 수 spliceslice내가없는 정수 인덱서, 처리합니다.

편집 : 또한 'key2'가 반드시 위치 [1]에 있다는 것도 모릅니다.

최신 정보

OK 약간의 붉은 청어, delete는 표면에서 원하는 것을 수행하는 것처럼 보이지만 json2.js를 사용하여 내 개체를 json으로 문자열 화하여 서버로 다시 밀어 넣습니다.

삭제 한 후 myHash는 다음과 같이 직렬화됩니다.

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]

json2.js의 버그입니까? 아니면 내가 삭제로 잘못하고 있습니까?

감사


3
당신이하고있는 일은 객체에 속성을 추가하는 것인데, 이는 배열 / 해시에 요소를 추가하는 것과는 다릅니다. 속성을 제거하는 방법을 찾고 있습니다. 다른 주석에서 언급했듯이 myHash.key1을 삭제하십시오.
David Andres

2
이 해시 테이블이 있다면, 당신은 사용해야합니다 var myHash = new Object()대신 var myHash = new Array().
cprcrack

답변:


183

당신은 찾고 있습니다 delete:

delete myhash['key2']

참고 항목 코어 자바 스크립트 가이드


1
나는 이것이 옳다고 생각했기 때문에 처음에 그것을 시도한 이유입니다. 그것은 않는 일에, 내 문제가 실제로 Json.stringify에있다, 병이 질문 업데이트
앤드류 불락

8
대신 스플 라이스 기능을 사용하십시오. 삭제는 배열에 구멍을 남깁니다.
David Andres

2
다음 은 앞서 언급 한 스플 라이스 기능 btw입니다.
Per Lundberg 2013

myhash현재 범위에서만 변경 해야하는 경우에는 이것이 최선의 선택이 아닙니다. delete변수가 myhash객체를 참조하는 경우 부작용이있을 수 있습니다 .
max pleaner

내 하루 @ karim79 tysm

11

new Array();해시 를 사용 합니까? new Object()대신 사용해야 합니다.

그리고 나는 당신이 원하는 것을 얻을 것이라고 생각합니다.


4
나는 새로운 것을 전혀 좋아하지 않는다. 나는 var myHash = []를 선호한다;
Nosredna

10
또는이 경우 myHash = {}; :-)
Nosredna

나는 동의한다. 배열이 제공하는 유일한 것은 인덱서를 int 이외의 다른 것으로 변경할 때 작동하지 않는 길이입니다.
당신의 친구 Ken

6

'key2'가 [1] 위치에 있다는 것을 반드시 알 필요는 없다고 말합니다. 글쎄요. 위치 1은 myHash [1]이 차지합니다.

함수와 같이 키 / 값 해시를 허용하는 자바 스크립트 배열을 남용하고 있습니다. JavaScript가 허용하더라도 연관 배열 용으로 설계된 언어처럼 처리 할 수있는 기능을 제공하지 않습니다. JavaScript의 배열 메서드는 번호가 매겨진 속성에서만 작동합니다.

가장 먼저해야 할 일은 배열이 아닌 객체로 전환하는 것입니다. 여기에서 객체가 아닌 배열을 사용할 이유가 없으므로 사용하지 마십시오. 배열을 사용하려면 요소에 번호를 매기고 해시 개념을 포기하십시오. 배열의 의도는 숫자로 인덱싱 할 수있는 정보를 보유하는 것입니다.

물론 원하는 경우 해시 (객체)를 배열에 넣을 수 있습니다.

myhash[1]={"key1","brightOrangeMonkey"};

1

다른 옵션은 John Resig 제거 방법 일 수 있습니다 . 필요한 것을 더 잘 맞출 수 있습니다. 배열의 인덱스를 알고 있다면.


2
색인을 가지고 있지 않다는 것은 정확히 질문이 말하는 것입니다
Andrew Bullock

안녕하세요 @AndrewBullock 저는 JSON 배열을 얻습니다. 예 : [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \"}] 같은 쿼리가 있지만 [{ "DE ":"3 "}] 이런하지만 난이 출력이 제발 도와주세요하지 않습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.