获取关联数组键列表

Sim*_*ver 255 javascript arrays

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

var dictionary = {
    "cats": [1,2,3,4,5], 
    "dogs": [6,7,8,9,10]
};
Run Code Online (Sandbox Code Playgroud)

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

var keys = ["cats", "dogs"];
Run Code Online (Sandbox Code Playgroud)

编辑7年后:只是为了使术语正确 - 在Javascript中没有"关联数组"这一点 - 这在技术上只是一个object,它是我们想要的对象键.

JW.*_*JW. 380

试试这个:

var keys = [];
for (var key in dictionary) {
  if (dictionary.hasOwnProperty(key)) {
    keys.push(key);
  }
}
Run Code Online (Sandbox Code Playgroud)

hasOwnProperty是必要的,因为可以将键插入到原型对象中dictionary.但是您通常不希望列表中包含这些键.

例如,如果您这样做:

Object.prototype.c = 3;
var dictionary = {a: 1, b: 2};
Run Code Online (Sandbox Code Playgroud)

然后做一个for...in循环了dictionary,你会得到ab,但你也将获得c.

  • @mzalazar,你最好做或者它将是一个全局变量,这是不好的做法. (2认同)
  • @mzalazar,但如果你只是使用`keys.push(key);`那么你就不会在任何时候声明它(**键**).你只是从全局命名空间中提取(并因此声明它).:) (2认同)

wom*_*ton 183

for (var key in dictionary) {
  // do something with key
}
Run Code Online (Sandbox Code Playgroud)

这是for..in声明.

  • 检查`dictionary.hasOwnProperty(key)`非常重要,否则你可能会得到原型链中的方法. (68认同)
  • 来自同一篇文章:_以任意顺序迭代对象的可枚举属性.如果键顺序很重要,则需要执行以下操作:例如将它们推入数组,对其进行排序,然后使用for()循环从已排序的数组中获取用于索引原始对象的键. (4认同)

小智 80

您可以使用: 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);
Run Code Online (Sandbox Code Playgroud)

请参阅下面的参考资料以获取浏 Firefox 4.20,Chrome 5,IE9支持它.下面的链接包含一个代码段,如果Object.keys()浏览器不支持,您可以添加该代码段.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys


Jes*_*sse 16

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

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