2011-07-28 39 views
12

Nếu tôi có:Thay đổi quan trọng trong mảng kết hợp js

var myArray = new Array(); 

myArray['hello'] = value; 

Làm thế nào tôi có thể thay đổi phím 'hello' để cái gì khác?

Điều gì đó giống như vậy sẽ hiệu quả.

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

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

myArray[to] = value; 

Nhưng có chức năng gốc hoặc cách nào tốt hơn để làm điều đó không?

chỉnh sửa:

Do thiếu các mảng kết hợp trong js, những gì tôi muốn làm thay đổi tên thuộc tính của một đối tượng một cách hiệu quả càng tốt.

+0

Các Phương thức "splice()" sẽ không hoạt động đối với các thuộc tính được đặt tên. Nó là một phương thức Array và vì vậy nó chỉ hoạt động trên các thuộc tính được đánh số nguyên của đối tượng. – Pointy

Trả lời

23

Trong JavaScript không có thứ gì như Mảng liên kết. Đối tượng có thể được sử dụng thay:

var myHash = new Object(); 

hoặc

var myHash = {}; 

thay thế có thể được thực hiện như thế này:

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

nhưng cách ưa thích để viết nó:

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

Vấn đề với xóa là nó không thực sự xóa, nó chỉ đặt giá trị thành không xác định. –

+1

Điều đó không đúng theo tài liệu: http://devedge-temp.mozilla.org/library/manuals/2000/javascript/1.3/reference/ops.html#1045837 –

+0

Xin lỗi, bạn nói đúng. Tôi không biết điều đó. –

2

Bạn thực sự không thể "thay đổi" tên thuộc tính, nhưng bạn luôn có thể gán giá trị thuộc tính cho tên mới, sau đó xóa giá trị ban đầu.

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

Ngoài ra, bạn đang làm việc với một cá thể Array nhưng sử dụng nó làm đối tượng đơn giản; mọi thứ bạn đang làm cũng sẽ hoạt động tốt với:

var myArray = {}; 

"Splice()" bạn đang cố gắng mã được đăng sẽ không hoạt động vì nó chỉ dành cho các thuộc tính mảng được lập chỉ mục thực tế, và không phải là thuộc tính được đặt tên.

Điều đó "xóa" không thực sự xóa thuộc tính thực sự không quan trọng. Giá trị "không xác định" là những gì bạn nhận được khi bạn kiểm tra đối tượng cho thuộc tính và không có thuộc tính như vậy.

Các vấn đề liên quan