2009-07-12 32 views
16

Có cách nào để lấy tên của thuộc tính đầu tiên của đối tượng JSON không?Nhận thuộc tính JSON đầu tiên

Tôi muốn làm điều gì đó như thế này:

var firstProp = jsonObj[0]; 

chỉnh sửa: Tôi nhận được một đối tượng JSON loại Mà tổ chức của mảng với các url hình ảnh.

như vậy:

{ 
    "category1":["image/url/1.jpg","image/url/2.jpg"], 
    "category2":["image/url/3.jpg","image/url/4.jpg"] 
} 

Tôi sau đó lặp lại thông qua các đối tượng để chèn các hình ảnh, và tất cả tôi thực sự muốn là một cách thanh lịch để xem những loại đã được chèn vào đầu tiên. Lúc đầu, tôi chỉ làm

for (var cat in images) { 
    if (i==0) firstCat = cat; 
    ... 
} 

Nhưng mà một số cách "cảm thấy" xấu xí ... Vì vậy, nó là về cơ bản chỉ là vấn đề của sự thanh lịch: p

+1

bạn không thể sử dụng một mảng để thay thế? – Gumbo

+0

dupe: http: // stackoverflow.com/questions/909003/javascript-get-the-first-index-of-an-đối tượng/909044 # 909044 – Miles

Trả lời

28

Thứ tự của các thuộc tính của đối tượng không được đảm bảo giống như cách bạn đặt chúng. Tuy nhiên, trong thực tế, tất cả các trình duyệt chính đều trả về theo thứ tự. Vì vậy, nếu bạn đang okay với dựa vào này ...

var firstProp; 
for(var key in jsonObj) { 
    if(jsonObj.hasOwnProperty(key)) { 
     firstProp = jsonObj[key]; 
     break; 
    } 
} 

Cũng lưu ý rằng có một bug in Chrome liên quan đến việc đặt hàng, trong một số trường hợp cạnh nó không đặt nó theo cách họ đã được cung cấp. Theo như nó thay đổi trong tương lai, cơ hội thực sự là khá nhỏ như tôi tin rằng điều này đang trở thành một phần của tiêu chuẩn vì vậy nếu bất cứ điều gì hỗ trợ cho điều này sẽ chỉ trở thành chính thức.

Tất cả mọi thứ được xem xét, mặc dù, nếu bạn thực sự, thực sự, tuyệt đối, tích cực, muốn chắc chắn nó sẽ theo đúng thứ tự bạn cần sử dụng một mảng. Nếu không, ở trên là tốt.

câu hỏi liên quan: Elements order - for (… in …) loop in javascript

+0

Nhưng điều gì sẽ xảy ra nếu thay đổi đó trong tương lai? –

+1

Chỉ cần lưu ý rằng thứ tự liệt kê thuộc tính đối tượng không biến nó thành thông số ECMAScript 5, Chrome đã nhanh chóng hoạt động và giờ đây các trình duyệt khác đang theo dõi, vì vậy nỗi sợ hãi của @ the_drow đã được thành lập tốt. –

2

Great câu hỏi. Tôi không biết cách nào ngoài việc lặp lại trong vòng lặp for-in. Bạn chỉ cần lặp lại một lần. Để đảm bảo an toàn, hãy đảm bảo đó là tài sản đã biết [more info].

for (var propName in jsonObj) { 
    if (jsonObj.hasOwnProperty(propName)) { 
     return propName; // or do something with it and break 
    } 
} 

Edited được thêm rõ ràng rằng bạn đang lặp lại trên các tên thuộc tính, không giá trị của họ.

14

Không có thuộc tính "đầu tiên". Các thuộc tính của một đối tượng không có thứ tự.

Bạn có thể lấy bất kỳ thứ gì mà công cụ JS quyết định cung cấp đầu tiên bằng vòng lặp.

function maybe_first_in_object(ob) { 
    for (var props in ob) { 
     return prop; 
    } 
} 

& hellip; nhưng nếu thứ tự quan trọng, hãy sử dụng một mảng không phải là một đối tượng.

+1

Điểm tốt là chúng không được đảm bảo là thứ tự bạn chỉ định chúng trong - upvoted. Tôi chắc chắn sẽ kiểm tra hasOwnProperty() mặc dù. –

+0

Tôi nhận được đối tượng JSON, vì vậy mảng không thực sự là một tùy chọn ... – peirix

+1

Errrrrrrr ......... {data: [1,2,3,4]} – Quentin

1

Khi sử dụng jQuery, bạn cũng có thể sử dụng $.each để lặp qua một đối tượng JSON. Trông sạch IMO vì sử dụng một for -loop

var items = { 
    'item1': 'content', 
    'item2': 'content', 
    'item3': 'content' 
} 

$.each(items, function() { 
    console.log($(this)[0]) 
}) 
17
console.log(jsonObj[Object.keys(jsonObj)[0]]); 
+0

Sẽ tốt hơn nếu bạn viết một lời giải thích nhỏ về lý do tại sao đây là câu trả lời và tại sao bạn lại trả lời tốt hơn các câu trả lời khác. –

+0

Như tôi đã hiểu, Object.keys (jsonObj) sẽ tạo một mảng các khóa của đối tượng có thể được truy cập bằng ký pháp []. [0] là mục đầu tiên trong mảng. Thêm điều này như tra cứu khóa cho jsonObject (bên trong các dấu ngoặc vuông của chính nó) về cơ bản là nói điều này; "làm cho một mảng của tất cả các phím trong đối tượng, cung cấp cho tôi đầu tiên trong số này, bây giờ tìm kiếm các giá trị cho khóa đó, trong đối tượng ban đầu". – Squidinker

+0

Tôi thực sự thích cái này tốt hơn – Rikku121

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