2012-03-10 40 views
7

Tôi có một đối tượng JSON như ví dụ:javascript - cách lấy tên đối tượng hoặc tên chỉ mục mảng kết hợp?

var list = {'name1' : {'element1': 'value1'}, 'name2' : {'element1': 'value2'}); 

Làm thế nào để trích xuất tất cả các giá trị chuỗi nameX?

Ví dụ, giả sử tôi muốn xuất chúng nối trong một chuỗi như: "name1 name2"

Sử dụng jQuery trong bất kỳ giải pháp là tốt. Xin cho biết ...

Trả lời

11

Để có được chìa khóa của một đối tượng, có Object.keys trong ES5, mà trả về một mảng:

Object.keys(list).join(" "); // "name1 name2" 

Nếu bạn muốn lọc các phím, bạn có thể sử dụng .filter:

Object.keys(list).filter(function(key) { 
    return key.indexOf("name") === 0; // filter keys that start with "name" 
}).join(" "); // "name1 name2" 
+1

Một lưu ý, mặc dù - phương pháp 'phím' đã được giới thiệu trong 1.8.5+. Nếu bạn cần khả năng tương thích ngược, bạn có thể thích sử dụng một thay thế như '_.keys' shim từ underscore.js (câu trả lời của @ mVChr cung cấp câu trả lời khác) – rjz

3
var names = Object.keys(list); 
4

Đối với các trình duyệt cũ không hỗ trợ keys:

var list_keys = [] 
for (var n in list) { 
    list_keys.push(n) 
} 
var names = list_keys.join(' '); 
+0

Bạn nên bao gồm kiểm tra hasOwnProperty:' if (list.hasOwnProperty (n)) '. – RobG

2

Vì bạn nói một giải pháp jQuery dựa trên sẽ là tốt, đây là một cách để làm điều đó với jQuery mà không đòi hỏi một shim ES5:

var itemString = $.map(list, function(item, key) { 
    return(key); 
}).join(" "); 

Làm việc giới thiệu ở đây: http://jsfiddle.net/jfriend00/a2AMH/

jQuery.map() lặp lại các thuộc tính của một đối tượng hoặc các mục của một mảng và xây dựng một mảng mới dựa trên hàm tùy chỉnh mà chúng ta truyền vào nó. Chúng tôi sau đó chỉ cần tham gia các kết quả của mảng đó vào một chuỗi. Bạn có thể đọc khoảng jQuery.map()here.

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