2009-02-17 145 views
248

的名單上有在Javascript關聯數組:獲取關聯數組鍵

var dictionary = { 
    "cats": [1,2,3,4,5], 
    "dogs": [6,7,8,9,10] 
}; 

如何獲得這本詞典的鑰匙?即我想

var keys = ["cats", "dogs"]; 

編輯7年後:剛剛拿到術語正確的 - 沒有在JavaScript中「關聯數組」沒有這樣的事 - 這在技術上只是一個object,它是對象我們想要的鑰匙。

+0

lodash JS的簡單方法 - https://lodash.com/docs#keys – 2016-04-06 03:04:59

回答

72

您可以使用:Object.keys(obj)

例子:

var dictionary = {"cats":[1,2,37,38,40,32,33,35,39,36], "dogs": [4,5,6,3,2]}; 

// Get the keys 
var keys = Object.keys(dictionary); 

請參見下面的瀏覽器支持參考。它支持Firefox 4.20,Chrome 5,IE9。以下鏈接包含一個代碼片段,如果您的瀏覽器不支持Object.keys(),則可以添加代碼片段。

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

380

試試這個:

var keys = []; 
for (var key in dictionary) { 
    if (dictionary.hasOwnProperty(key)) { 
    keys.push(key); 
    } 
} 

hasOwnProperty需要的,因爲它可以插入鑰匙進入dictionary原型對象。但是你通常不希望這些密鑰包含在你的列表中。

例如,如果你這樣做:

Object.prototype.c = 3; 
var dictionary = {a: 1, b: 2}; 

,然後做一個for...in遍歷dictionary,你會得到ab,但你也將獲得c

+36

+1 .hasOwnProperty() – MrFox 2013-05-24 08:56:39

+0

無需聲明「var keys = []」,除非您需要在循環後使用它。 – mzalazar 2014-09-03 16:25:30

+2

@mzalazar,你最好做或者它會成爲一個全局變量,這是不好的做法。 – b00t 2016-03-09 07:42:56

16

只是簡單的說明,如果使用庫(jQuery,原型等),請謹慎使用for..in,因爲它們中的大多數都會向創建的對象(包括字典)添加方法。

這將意味着當你循環它們時,方法名稱將顯示爲鍵。如果您正在使用庫,請查看文檔並查找可枚舉部分,您將在其中找到用於迭代對象的正確方法。

3

簡單的jQuery的方式。

這就是我使用的
DictionaryObj是你想要通過的javascript字典對象。價值,關鍵在於它們在字典中的名字。

$.each(DictionaryObj, function (key, value) { 
      $("#storeDuplicationList") 
       .append($("<li></li>") 
       .attr("value", key) 
       .text(value)); 
     }); 
0

我目前使用的羅布·德拉克魯茲的答覆

Object.keys(obj) 

,並在文件中早裝上我有從其他地方借來的互聯網上的代碼一些線路覆蓋舊的情況下,腳本解釋器的版本沒有Object.keys內置

if (!Object.keys) { 
    Object.keys = function(object) { 
     var keys = []; 
     for (var o in object) { 
      if (object.hasOwnProperty(o)) { 
       keys.push(o); 
      } 
     } 
     return keys; 
    }; 
} 

我認爲這是兩全其美的大項目:簡單的現代代碼和向後兼容的支持舊版本的瀏覽器等。

它有效地將JW的解決方案納入Rob de la Cruz的功能 Object.keys(obj)不是本地可用的。