Javascript 获取关联数组键的列表

Javascript 获取关联数组键的列表,javascript,arrays,Javascript,Arrays,我在JavaScript中有一个关联数组: var dictionary = { "cats": [1,2,3,4,5], "dogs": [6,7,8,9,10] }; 我怎样得到这本字典的钥匙?也就是说,我想要 var keys = ["cats", "dogs"]; 只是为了让术语正确-JavaScript中没有“关联数组”这类东西-从技术上讲,这只是一个对象,这是我们想要的对象键。试试这

我在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
是必需的,因为可以将键插入到
字典的原型对象中。但您通常不希望这些键包含在列表中

例如,如果您这样做:

Object.prototype.c = 3;
var dictionary = {a: 1, b: 2};
然后为…做一个
,在
字典
上循环,你会得到
a
b
,但你也会得到
c

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(字典);
控制台日志(键)简单的jQuery方式:

这就是我使用的:

DictionaryObj是您想要使用的JavaScript字典对象。和值,关键当然是它们在字典中的名称

$.each(DictionaryObj, function (key, value) {
    $("#storeDuplicationList")
        .append($("<li></li>")
        .attr("value", key)
        .text(value));
});
$。每个(字典、函数(键、值){
$(“#StoreReplicationList”)
.追加($(“
  • ”) .attr(“值”,键) .文本(值)); });
    我目前正在使用:

    在早些时候加载的一个文件中,我从互联网上的其他地方借用了一些代码,这些代码涵盖了没有内置Object.key的旧版本脚本解释器的情况

    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的
    Object.keys(obj)本机不可用。

    刚刚注意到,在“dogs”和上面的数组之间应该有一个冒号,而不是逗号。假设这是由于转录造成的。检查dictionary.hasOwnProperty(key)
    非常重要,否则您可能会得到原型链中的方法。来自同一篇文章:以任意顺序迭代对象的可枚举属性。如果键顺序很重要,则需要执行一些操作,例如将它们放入数组中,对其进行排序,然后使用for()循环从排序后的数组中获取键,以便对原始对象进行索引。当然,通过省略字典进行优化是公平的。hasOwnProperty检查是否可以确定对象缺少原型。但在此上下文中注意原型继承的可能性很重要,因为JavaScript字典实际上是对象。无需声明“var keys=[]”,除非您需要在循环后使用它。@mzalazar,您最好这样做,否则它将是一个全局变量,这是错误的做法。@b00t我认为通过在for循环中声明变量。。。它不会设置在全局空间中。。。现在你让我怀疑呵呵:)@mzalazar,但如果你只是使用
    keys.push(key),你在任何时候都不会声明它(key)。您只是从全局名称空间中提取(并因此声明它):)这需要jQuery(这很好),但您忘了提到它:-)@Exzile函数定义中的参数名称非常混乱。它表示回调是函数(String propertyName,Object valueOfProperty)。你的名字正好相反。@Chris我会帮你更新的。感谢您指出这一点。使用lodash JS的简单方法-感谢您澄清术语!你能在亮红色闪烁的灯光下把它放大一点吗?@Joe我会在谷歌上为你做第一个结果,等我有机会的时候,我现在就把它换成公认的答案。只有IE8不再支持它(可使用polyfill)
    
    if (!Object.keys) {
        Object.keys = function(object) {
            var keys = [];
            for (var o in object) {
                if (object.hasOwnProperty(o)) {
                    keys.push(o);
                }
            }
            return keys;
        };
    }