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

주어진

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의 버그입니까? 아니면 내가 삭제로 잘못하고 있습니까?

감사



답변

당신은 찾고 있습니다 delete:

delete myhash['key2']

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


답변

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

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


답변

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

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

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

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

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


답변

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


답변