2011-07-28 4 views
12

내가있는 경우 :변경 키

var myArray = new Array(); 

myArray['hello'] = value; 

가 어떻게 뭔가 다른 키를 '안녕하세요'변경할 수 있습니까?

이와 비슷한 기능이 작동합니다.

var from = 'hello', 
    to = 'world', 
    i, value = myArray[from]; 

for(i in myArray) 
    if(i == from) myArray.splice(i, 1); 

myArray[to] = value; 

하지만 네이티브 기능이나 더 좋은 방법이 있습니까?

편집 : 때문에 나는 가능한 한 효율적으로 객체의 속성 이름을 수정 수행 할 작업을 JS에서 연관 배열의 부족

.

+0

"splice()"메서드는 명명 된 속성에는 작동하지 않습니다. 이것은 Array 메소드이며 객체의 정수 인덱스 속성에서만 작동합니다. – Pointy

답변

23

JavaScript에는 연관 배열과 같은 것이 없습니다. 객체 대신 사용할 수 있습니다

var myHash = new Object(); 

또는

var myHash = {}; 

교체

을 다음과 같이 수행 할 수 있습니다

myHash["from"] = "value"; 
myHash["to"] = myHash["from"]; 
delete myHash["from"]; 

하지만 선호하는 방법 그것을 작성 :

myHash.from = "value"; 
myHash.to = myHash.from; 
delete myHash.from; 
+1

삭제시 문제는 실제로 삭제되지 않는다는 것입니다. 값을 정의되지 않은 값으로 설정합니다. –

+1

문서에 따르면 사실이 아니어야합니다. http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

죄송합니다. 난 몰랐어. –

2

정말 속성 이름을 "변경할"수는 없지만 항상 새 이름에 속성 값을 할당 한 다음 원래 이름을 삭제할 수 있습니다.

myArray['world'] = myArray.hello; 
delete myArray.hello; 

또한 Array 인스턴스로 작업하지만 단순한 개체로 사용하고 있습니다. 당신이 단지 잘 작동하고있는 모든 :

var myArray = {}; 

은 "스플 라이스()"그것은 단지 실제 정수 인덱스 배열의 속성이기 때문에 당신이 작동하지 않습니다 게시 된 코드에서 시도하고, 명명 된 속성이 아닙니다.

"삭제"가 실제로 속성을 삭제하지 않는다는 것은 중요하지 않습니다. "정의되지 않은"값은 속성의 개체를 검사 할 때 얻는 값이며 해당 속성이 없습니다.