获取关联数组键的列表

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

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

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

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

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

309015 次浏览

试试这个:

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};

然后在dictionary上执行for...in循环,你会得到ab,但你也会得到c

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

它是在声明中. .

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

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

你可以使用: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和Internet Explorer 9。Object.keys() .keys(包含一个代码片段,如果你的浏览器不支持Object.keys(),你可以添加这个代码片段。

简单的jQuery方法:

这是我所使用的:

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

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

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

Object.keys(obj)

在早期加载的文件中,我有一些代码行从网上其他地方借来的,其中涵盖了旧版本的脚本解释器没有对象的情况。内置钥匙。

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的

.keys(obj)不是本机可用的