首页 文章

获取关联数组键列表

提问于
浏览
252

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

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

我如何获得这本词典的密钥?即我想要

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

编辑7年后:只是为了使术语正确 - 在Javascript中没有'associative array'这样的东西 - 这在技术上只是 object 而且它是我们想要的对象键 .

6 回答

  • 3

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

  • 184

    试试这个:

    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 .

  • 75
    for (var key in dictionary) {
      // do something with key
    }
    

    这是for..in statement .

  • 0

    只是一个简单的注释,警惕使用for..in如果你使用一个库(jQuery,原型等),因为他们中的大多数都添加了创建对象(包括字典)的方法 .

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

  • 379

    简单的JQUERY方式 .

    这就是我使用的
    DictionaryObj是你想要经历的javascript字典对象 . Value ,关键是在字典中它们的名称 .

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

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

    Object.keys(obj)
    

    在早期加载的文件中,我有一些代码行 borrowed from elsewhere on the internet ,它涵盖了没有内置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.keys(obj)本身不可用时,它有效地将JW的解决方案纳入了该功能 .

相关问题