如何获取关联数组键的列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (6)
  • 关注 (0)
  • 查看 (44)

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

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

我应该如何获取该目录的键值?

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

在JavaScript中没有像'关联数组'那样的东西 - 这在技术上只是一个对象,而且是我们想要的对象键。

提问于
用户回答回答于

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

以下链接包含一个代码片段,如果你的浏览器不支持Object.keys(),则可以添加它。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/object/ke

用户回答回答于

Object.keys(obj)

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

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.key(Obj)本机不可用时,它有效地将JW的解决方案放入函数中。

用户回答回答于

简单的jQuery方式。

DictionaryObj是你想要通过的javascript字典对象和值,关键字是字典中的名称。

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

如果使用库(jQuery,原型等),请谨慎使用for..in,因为它们中的大多数都会为创建的对象(包括字典)添加方法。

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

用户回答回答于
用户回答回答于

尝试以下代码:

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

扫码关注云+社区