我在JavaScript中有一个关联数组:
var dictionary = { "cats": [1,2,3,4,5], "dogs": [6,7,8,9,10] };
我如何获得这个字典的键?也就是说,我想
var keys = ["cats", "dogs"];
只是为了让术语正确-在JavaScript中没有“关联数组”这样的东西-这在技术上只是一个object,它是我们想要的对象键。
object
试试这个:
var keys = []; for (var key in dictionary) { if (dictionary.hasOwnProperty(key)) { keys.push(key); } }
hasOwnProperty是必需的,因为可以将键插入到dictionary的原型对象中。但您通常不希望将这些键包含在列表中。
hasOwnProperty
dictionary
例如,如果你这样做:
Object.prototype.c = 3; var dictionary = {a: 1, b: 2};
然后在dictionary上执行for...in循环,你会得到a和b,但你也会得到c。
for...in
a
b
c
for (var key in dictionary) { // Do something with key }
它是在声明中. .。
只是一个简短的笔记。如果你使用库(jQuery, 原型等),请谨慎使用for..in,因为大多数库都会向创建的对象(包括字典)添加方法。
for..in
这意味着当循环遍历它们时,方法名将以键的形式出现。如果您正在使用库,请查看文档并寻找可枚举的部分,在那里您将找到用于对象迭代的正确方法。
你可以使用:Object.keys(obj)
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和Internet Explorer 9。Object.keys() .keys(包含一个代码片段,如果你的浏览器不支持Object.keys(),你可以添加这个代码片段。
Object.keys()
简单的jQuery方法:
这是我所使用的:
DictionaryObj是你要遍历的JavaScript字典对象。value, key当然是它们在字典里的名字。
$.each(DictionaryObj, function (key, value) { $("#storeDuplicationList") .append($("<li></li>") .attr("value", key) .text(value)); });
我目前正在使用Rob de la Cruz的回答:
在早期加载的文件中,我有一些代码行从网上其他地方借来的,其中涵盖了旧版本的脚本解释器没有对象的情况。内置钥匙。
if (!Object.keys) { Object.keys = function(object) { var keys = []; for (var o in object) { if (object.hasOwnProperty(o)) { keys.push(o); } } return keys; }; }
我认为这对大型项目来说是最好的:简单的现代代码和对旧版本浏览器的向后兼容支持,等等。