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

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

我如何获得这个字典的键?也就是说,我想

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

只是为了让术语正确- JavaScript中没有所谓的“关联数组”-技术上这只是一个对象,它是我们想要的对象键。


当前回答

试试这个:

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…在字典循环中,你会得到a和b,但你也会得到c。

其他回答

只是一个简短的笔记。如果你使用一个库(jQuery, Prototype等),请谨慎使用for..in,因为大多数库都会为创建的对象(包括字典)添加方法。

这意味着当循环遍历它们时,方法名将以键的形式出现。如果您正在使用库,请查看文档并寻找可枚举的部分,在那里您将找到用于对象迭代的正确方法。

简单的jQuery方法:

这是我所使用的:

DictionaryObj是你要遍历的JavaScript字典对象。value, key当然是它们在字典里的名字。

$.each(DictionaryObj, function (key, value) {
    $("#storeDuplicationList")
        .append($("<li></li>")
        .attr("value", key)
        .text(value));
});
for (var key in dictionary) {
  // Do something with key
}

它是for. in语句。

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

例子:

Var字典= { “猫”:[1,2,37,38,40,32,33,35,39,36], “狗”:[4,5,6,3,2] }; //去拿钥匙 var keys = Object.keys(字典); console.log(键);

有关浏览器支持,请参阅下面的参考资料。支持Firefox 4.20、Chrome 5和Internet Explorer 9。Object.keys()包含一个代码片段,如果您的浏览器不支持Object.keys(),可以添加该代码片段。

试试这个:

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…在字典循环中,你会得到a和b,但你也会得到c。