2012-05-18 27 views
55

Tôi có từ điển:Cách lấy bộ sưu tập khóa trong từ điển javascript?

var driversCounter = { 
"one": 1, 
"two": 2, 
"three": 3, 
"four": 4, 
"five": 5 
} 

Bây giờ, tôi cần phải chứng minh nó trong DropDownList. Làm thế nào để có được bộ sưu tập các phím trong từ điển của tôi?

+0

http://stackoverflow.com/questions/8763125/get-array-of-objects-keys –

Trả lời

73

Sử dụng Object.keys() hoặc shim trong trình duyệt cũ hơn.

Ngoài ra, xem xét trường hợp sử dụng của bạn, có lẽ điều này sẽ làm điều đó ...

var selectBox, option, prop; 

selectBox = document.getElementById("drivers"); 

for (prop in driversCounter) { 
    option = document.createElement("option"); 
    option.textContent = prop; 
    option.value = driversCounter[prop]; 
    selectBox.add(option); 
} 
+0

'dict.hasOwnProperty (key) ' –

3

Với một động cơ JS hiện đại, bạn có thể sử dụng Object.keys(driversCounter)

46

Một lựa chọn là sử dụng Object.keys():

Object.keys(driversCounter) 

Nó hoạt động tốt cho các trình duyệt hiện đại (tuy nhiên, IE chỉ hỗ trợ nó bắt đầu từ phiên bản 9).

Để thêm hỗ trợ tương thích, bạn có thể sao chép đoạn mã được cung cấp trong MDN.

+1

Hầu hết câu trả lời có thể sử dụng ở đây! – securecurve

17

để lặp qua "từ điển" (chúng tôi gọi nó là đối tượng trong JS), sử dụng một vòng lặp for in:

for(var key in driversCounter) { 
    if(driversCounter.hasOwnProperty(key)) { 
     //key     = keys, left of the ":" 
     //driversCounter[key] = value, right of the ":" 
    } 
} 
1

cho các trình duyệt mới: Object.keys(MY_DICTIONARY) sẽ trả về một mảng các phím. Khác mà bạn có thể muốn đi theo con đường học cũ:

var keys = [] 
for(var key in dic) keys.push(key); 
+0

thích câu trả lời của Joseph cho cái gọi là trường học cũ –

+0

Không đầy đủ do có thể tạo mẫu. –

+0

đó là lý do tại sao khi tôi nhìn thấy câu trả lời của joseph, tôi nhớ rằng ... và thay vì chỉnh sửa nó, tôi chỉ nói để thích câu trả lời của mình, phải không? –

1

Như những người khác đã nói, bạn có thể sử dụng Object.keys(), nhưng những người quan tâm về các trình duyệt cũ, phải không?

Vâng, tôi biết.

Hãy thử this. array_keys từ cổng PHPJS Chức năng array_keys tiện dụng của PHP để nó có thể được sử dụng trong JS. Trong nháy mắt, nó sử dụng Object.keys nếu được hỗ trợ, nhưng xử lý trường hợp nó không phải là rất dễ dàng. Nó thậm chí bao gồm lọc các phím dựa trên giá trị mà bạn có thể tìm kiếm (không bắt buộc) và phần chuyển đổi cho có hay không sử dụng so sánh nghiêm ngặt === so typecasting so == (không bắt buộc)

7

này sẽ làm việc trong tất cả các triển khai JavaScript:

var keys = []; 

for (var key in driversCounter) { 
    if (driversCounter.hasOwnProperty(key)) { 
     keys.push(key); 
    } 
} 

Giống như những người khác được đề cập trước khi bạn có thể sử dụng Object.keys, nhưng nó có thể không hoạt động trong các công cụ cũ hơn. Vì vậy, bạn có thể sử dụng các bản vá khỉ sau:

if (!Object.keys) { 
    Object.keys = function (object) { 
     var keys = []; 

     for (var key in object) { 
      if (object.hasOwnProperty(key)) { 
       keys.push(key); 
      } 
     } 
    } 
} 
-3

Một cách tiếp cận khác nhau sẽ được sử dụng mảng đa chiều:

var driversCounter = [ 
    ["one", 1], 
    ["two", 2], 
    ["three", 3], 
    ["four", 4], 
    ["five", 5] 
] 

và truy cập các giá trị bằng cách driverCounter [k] [j], trong đó j = 0,1 trong trường hợp.
Thêm nó trong một danh sách thả xuống theo:

var dd = document.getElementById('your_dropdown_element'); 
for(i=0;i<driversCounter.length-1;i++) 
{ 
    dd.options.add(opt); 
    opt.text = driversCounter[i][0]; 
    opt.value = driversCounter[i][1]; 
} 
+1

Khối mã đầu tiên đó không hợp lệ. – alex

1

nếu bạn có thể sử dụng JQuery sau đó

var keys = []; 
$.each(driversCounter, function(key, value) { 
    keys.push(key); 
}); 

console.log(JSON.stringify(keys)); 

đây sau câu trả lời:

["one","two","three","four","five"] 

và cách này bạn wouldn' t phải lo lắng nếu trình duyệt hỗ trợ phương thức Object.keys hay không.

2

sử dụng Object.Keys()

var driversCounter = { 
 
         "one": 1, 
 
         "two": 2, 
 
         "three": 3, 
 
         "four": 4, 
 
         "five": 5 
 
        } 
 
console.log(Object.keys(driversCounter));

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