获取关联数组键列表

时间:2009-02-17 22:20:54

标签: javascript arrays

我在Javascript中有一个关联数组:

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

如何获取此词典的密钥?即我想要

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

7年后编辑:只是为了使术语正确 - 在Javascript中没有“关联数组”这一点 - 这在技术上只是object而且它是我们想要的对象键。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:184)

for (var key in dictionary) {
  // do something with key
}

这是for..in statement

答案 2 :(得分:78)

您可以使用: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);

console.log(keys);

有关浏览器支持,请参阅下面的参考。 Firefox 4.20,Chrome 5,IE9支持它。下面的链接包含一个代码段,如果您的浏览器不支持Object.keys(),则可以添加该代码段。

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

答案 3 :(得分:16)

请注意,如果使用库(jQuery,原型等),请小心使用for ..in,因为大多数都会添加创建对象(包括词典)的方法。

这意味着当您遍历它们时,方法名称将显示为键。如果您正在使用库,请查看文档并查找可枚举的部分,您将在其中找到用于迭代对象的正确方法。

答案 4 :(得分:3)

简单的JQUERY方式。

这是我用的 DictionaryObj是你想要经历的javascript字典对象。 价值,关键是在字典中它们的名称。

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

答案 5 :(得分:0)

我目前正在使用Rob de la Cruz的回复

Object.keys(obj)

并且在早期加载的文件中,我有一些代码行从互联网上的其他地方借来,其中包含没有内置Object.keys的旧版脚本解释器的情况。< / p>

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

我认为这是大型项目的两全其美:简单的现代代码和对旧版浏览器的向后兼容支持等。

当Rob de la Cruz的时候,它有效地将JW的解决方案付诸实践 Object.keys(obj)本身不可用。