2009-02-17 70 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)不是本地可用的。