2013-05-15 13 views
13

Tình hìnhtruy cập thuộc tính đối tượng của một javascript mà không biết rằng tên thuộc tính

Tôi có một đối tượng JSON được trả lại. Dưới đây là một ví dụ về một. who trong ví dụ cụ thể này có thể thay đổi thành bất kỳ tên thuộc tính nào là bắt buộc. Vì vậy, ví dụ như thời gian tiếp theo này sẽ name hơn who

[{"who":"Arthur"},{"who":"Craig"},{"who":"Dan"},{"who":"Daniel"},{"who":"Frank"},{"who":"Ian"},{"who":"jamie"},{"who":"Jason"},{"who":"jaz"},{"who":"Liam"},{"who":"Paul"},{"who":"Shaun"},{"who":"Wayne"}] 

Vấn đề

Trong JS của tôi, tôi cần để có thể tham khảo các tài sản và truy cập dữ liệu của nó mà không sử dụng tên của nó như tên gọi sẽ luôn luôn là một cái gì đó khác nhau.

Những gì tôi đã cố gắng

data.forEach(function(m){ 
    console.info(m); //Object { who="Craig"} 
    console.info(m.who); //Craig, as expected 
    console.info(m[0]); //now not sure who to get it if who changes to name 
}); 
+0

Bạn đang tìm kiếm cho 'm [ 'người'] '? –

+0

thực sự, đây sẽ là cách tôi có thể trả lại ai. Nhưng tôi cần để có thể trả về một chuỗi. Vì vậy, m ['*'] có hiệu quả. Tôi không biết tên của tài sản. –

+0

Gotcha, câu trả lời được thêm vào. –

Trả lời

20

Object.keys(m)[0] nên trả lại tên thuộc tính đếm được đầu tiên trong đối tượng m.

Vì vậy, nếu m = {"who": "Arthur"}; thì m[Object.keys(m)[0]] sẽ là "Arthur".

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys


Hoặc: Object.values(m)[0]. Xem Object.values

+2

Dam dude ... Tôi đã đập JS cho một năm về cơ bản và không bao giờ bận tâm để nhìn vào 'Object';) cảm ơn đã chỉ cho tôi theo hướng này. Làm việc hoàn hảo! : D –

+0

Ngọt, vì vậy tôi có thể có được một cái nhìn cấp cao nhất của một đối tượng bằng cách tham chiếu đến nó với Object ... niicceeee –

+0

@RickViscomi Lưu ý rằng 'Object.keys' không hoạt động trong IE8. [Xem tại đây] (http://kangax.github.io/es5-compat-table/#Object.keys) – hitautodestruct

2

Nếu bạn luôn mong đợi các đối tượng này để chỉ có một thuộc tính, bạn có thể làm một cái gì đó như thế này:

var name, person; 
for (person in data) { 
    for (name in data[person]) { 
     console.log(data[person][name]); 
    } 
} 

này sẽ liệt kê qua từng tài sản của mỗi người trong dữ liệu. Bởi vì chỉ có một thuộc tính cho mỗi người (tôi giả định), nó sẽ chỉ liệt kê một thuộc tính đó và dừng lại, cho phép bạn sử dụng thuộc tính đó bất kể tên của nó.

+0

Câu trả lời của Rick tốt hơn. –

0

Bạn cũng có thể sử dụng for in loop:

data.forEach(function (m) { 

    for (var key in m) { 

    console.log(key); // "who" 
    console.log(m[key]); // "Arthur" 

    } 

}); 

Trên đây cũng sẽ làm việc cho nhiều key: value cặp trong tức là đối tượng của bạn:

[ {"who":"Arthur","who":"Fred"} ]