2013-07-14 173 views
43

值我有這樣的對象:從對象獲取的JavaScript

var data = {"id": 1, "second": "abcd"}; 

這是從一種形式的值。我通過這個函數進行驗證。

如果上述屬性存在,我們可以使用data["id"]data["second"]來獲得它們的值,但有時,根據其他值,屬性可能會不同。

如何從data獲得獨立於屬性名稱的值?

+4

這是一個_Object_,而不是_Array_。 –

+1

首先,這不是一個數組。其次,你所稱的「索引」通常稱爲屬性名稱或密鑰。沒有辦法獲得價值,除了財產。儘管任何表達式都可以放在'[]'中,並且它的返回值將被用作屬性名稱。 –

+0

對不起................. –

回答

56

訪問對象的屬性,而無需知道這些屬性的名稱,你可以使用一個for ... in循環:

for(key in data) { 
    if(data.hasOwnProperty(key)) { 
     var value = data[key]; 
     //do something with value; 
    } 
} 
+3

不要忘記檢查'hasOwnProperty' –

+0

@PaulS。感謝提醒:)更新了答案 – cfs

+3

退出'.hasOwnProperty'。我們不要分散使用不必要的警衛。這是不好的做法。 –

5

我很抱歉,你最後的問題是不是清楚,但你是從非常錯誤的第一行。可變數據是對象不是陣列

訪問一個對象的屬性是很容易的:

alert(data.second); 

但是,如果這並不能完全回答你的問題,請澄清並回傳。

謝謝!

-12

使用

的console.log(可變)

,如果你使用谷歌Chrome中打開控制檯通過按Ctrl + Shift + J

轉到>>控制檯

40

如果你想請嘗試:

Object.keys(a).map(function(key){return a[key]}) 
+6

指出Object.keys()在IE9 +支持的ECMA5中引入可能很有用。 – Soulriser

8

如果您$定義然後可以遍歷

var data={"id" : 1, "second" : "abcd"}; 
$.each(data, function() { 
    var key = Object.keys(this)[0]; 
    var value = this[key]; 
    //do something with value; 
}); 

如果你知道鍵

data.id 

data["id"] 
+0

它爲我工作...謝謝 –

24

在ES2017你可以使用Object.values()的數值您可以通過以下方式訪問它:

Object.values(data) 

在撰寫本文時,支持有限(FireFox和Chrome)。 除IE以外的所有主流瀏覽器都支持這一功能。

在ES2015您可以使用此:

Object.keys(data).map(k => data[k]) 
1

使用lodash_.values(object)

_.values({"id": 1, "second": "abcd"}) 

[ 1, 'abcd' ] 

lodash包括一大堆的其他功能與數組,對象集合,串的工作,多指你希望被建成JavaScript(實際上似乎慢慢地進入語言)。