Javascript 获取关联数组键的列表
我在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中没有“关联数组”这类东西-从技术上讲,这只是一个对象,这是我们想要的对象键。试试这
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;
};
}