2011-07-28 28 views
12

ben varsa:değiştir tuşu

var myArray = new Array(); 

myArray['hello'] = value; 

nasıl başka bir şey anahtar 'merhaba' değiştirebilirim?

Böyle bir şey işe yarayacaktır.

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

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

myArray[to] = value; 

Ancak, yerel bir işlev mi yoksa daha iyi bir yolu var mı?

düzenleme: nedeniyle ben mümkün olduğunca verimli bir nesnenin özellik adını değiştirmek ne yapmak istediğinizi js ilişkilendirilebilir dizilerle, eksikliği

.

+0

"splice()" yöntemi, adlandırılmış özellikler için çalışmaz. Bu bir Array yöntemidir ve bu nedenle yalnızca nesnenin tamsayı indeksli özellikleri üzerinde çalışır. – Pointy

cevap

23

JavaScript'te ilişkilendirici Array diye bir şey yoktur. Nesneler yerine kullanılabilir:

var myHash = new Object(); 

veya

var myHash = {}; 

yerine

böyle yapılabilir:

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

ancak tercih yolu yazmaya:

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

Silmekte olan sorun, gerçekten silmediğidir, sadece değeri undefined olarak ayarlar. –

+1

Bu, belgelere göre doğru olmamalıdır: http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

Üzgünüz, haklısınız. Bunu bilmiyordum. –

2

Özellik adını gerçekten "değiştiremezsiniz", ancak her zaman yeni bir ada sahip bir özellik değeri atayabilir ve sonra özgün olanı silebilirsiniz.

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

Ayrıca, bir Array örneğiyle çalışıyor ancak bunu basit bir nesne olarak kullanıyorsunuz; Eğer sadece de çalışmak yapıyoruz her şeyi:

var myArray = {}; 

"ek yeri()" sadece gerçek tamsayı-endeksli dizi özellikleri için çünkü sen işe yaramaz yayınlanan kod çalışıyorsanız, ve adlandırılmış özellikler değil.

Bu "sil", gerçekten bir özelliği gerçekten silmez. "Tanımsız" değeri, bir mülk için bir nesneyi kontrol ettiğinizde aldığınız şeydir ve böyle bir özellik yoktur.