我在Javascript中有一个关联数组:
var dictionary = {
"cats": [1,2,3,4,5],
"dogs": [6,7,8,9,10]
};
如何获取此词典的密钥?即我想要
var keys = ["cats", "dogs"];
7年后编辑:只是为了使术语正确 - 在Javascript中没有“关联数组”这一点 - 这在技术上只是object
而且它是我们想要的对象键。
答案 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
循环,您将获得a
和b
,但您也会获得c
。
答案 1 :(得分:184)
for (var key in dictionary) {
// do something with key
}
答案 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)本身不可用。