주어진
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' };
유일한 워드 프로세서 나에 찾을 수 splice
와 slice
내가없는 정수 인덱서, 처리합니다.
편집 : 또한 ‘key2’가 반드시 위치 [1]에 있다는 것도 모릅니다.
최신 정보
OK 약간의 붉은 청어, delete는 표면에서 원하는 것을 수행하는 것처럼 보이지만 json2.js를 사용하여 내 개체를 json으로 문자열 화하여 서버로 다시 밀어 넣습니다.
삭제 한 후 myHash는 다음과 같이 직렬화됩니다.
[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ]
json2.js의 버그입니까? 아니면 내가 삭제로 잘못하고 있습니까?
감사
답변
답변
왜 new Array();
해시 를 사용 합니까? new Object()
대신 사용해야 합니다.
그리고 나는 당신이 원하는 것을 얻을 것이라고 생각합니다.
답변
‘key2’가 [1] 위치에 있다는 것을 반드시 알 필요는 없다고 말합니다. 글쎄요. 위치 1은 myHash [1]이 차지합니다.
함수와 같이 키 / 값 해시를 허용하는 자바 스크립트 배열을 남용하고 있습니다. JavaScript가 허용하더라도 연관 배열 용으로 설계된 언어처럼 처리 할 수있는 기능을 제공하지 않습니다. JavaScript의 배열 메서드는 번호가 매겨진 속성에서만 작동합니다.
가장 먼저해야 할 일은 배열이 아닌 객체로 전환하는 것입니다. 여기에서 객체가 아닌 배열을 사용할 이유가 없으므로 사용하지 마십시오. 배열을 사용하려면 요소에 번호를 매기고 해시 개념을 포기하십시오. 배열의 의도는 숫자로 인덱싱 할 수있는 정보를 보유하는 것입니다.
물론 원하는 경우 해시 (객체)를 배열에 넣을 수 있습니다.
myhash[1]={"key1","brightOrangeMonkey"};