JavaScript-获取关联数组中元素的名称
我有一个JavaScript对象,它被视为一个关联数组。让我们称之为“场”。它有几个要素,例如:JavaScript-获取关联数组中元素的名称,javascript,arrays,Javascript,Arrays,我有一个JavaScript对象,它被视为一个关联数组。让我们称之为“场”。它有几个要素,例如: fields['element1'] = ... fields['element2'] = ... fields['element3'] = ... 给定字段[0],是否可以获取属性的名称(即“element1”)而不是其值?否,原因有二 字段[0]和字段[“element1”]是不同的属性 对象中的属性显式无序 您可以在属性上循环: function (obj) { for (prop in
fields['element1'] = ...
fields['element2'] = ...
fields['element3'] = ...
给定字段[0],是否可以获取属性的名称(即“element1”)而不是其值?否,原因有二
function (obj) {
for (prop in obj) {
if (obj.hasOwnProperty(prop) {
return prop;
}
}
};
…获取“first”的任意值的“first”属性,该值可以随时更改
解释hasOwnProperty模式。没有
字段[0]
(除非字段
是一个数组
对象,它支持数字索引),因此您无法获得这样的名称。但你可以这样模拟:
function getKey(obj, i) {
var j = 0;
for (var p in obj) {
if (j++ == i) return p;
}
return null;
}
for(obj中的var p)
将循环遍历对象obj
中的每个字段名。通过获取第n个字段名,可以有效地获取某个索引的“键”
请注意,虽然它正在努力成为一个标准,但根据标准,字段名的顺序目前无法保证,这意味着在修改对象后,相同的函数调用理论上可能返回不同的字段名。同样,不同的浏览器可以返回不同的结果。实际上,你会发现几乎所有的浏览器都保持了字段名的顺序,所以你根本不必担心它。只需指出其他人的回答中隐含的内容:Javascript中的“关联数组”实际上只是
对象
实例,例如
var aa = {};
aa.foo = 'argle';
alert(aa['foo']); // Will alert 'argle'
请不要使用
数组
而不是对象
-它可能会对aa式迭代中的键造成严重破坏。假设您有一个对象对象。它可以是:
var oObject = {} ;
oObject["aaa"] = "AAA" ;
oObject["bbb"] = "BBB" ;
oObject["ccc"] = "CCC" ;
oObject["ddd"] = "DDD" ;
oObject["eee"] = "EEE" ;
现在,假设您想知道其属性的名称和值,将其放入变量strName和strValue中。为此,请使用“For(x in o)”构造,如下例所示:
var strName, strValue ;
for(strName in oObject)
{
strValue = oObject[strName] ;
alert("name : " + strName + " : value : " + strValue) ;
}
“for(x in o)”构造将迭代对象“o”的所有属性,并在每次迭代时将当前属性名放入变量“x”。你所要做的就是,写出o[x]来获得它的值,但你已经知道了
附加信息
经过一些思考,在看到Hank Gay的评论后,我觉得额外的信息可能会很有趣
让我们天真一点(忘记“在JavaScript中,所有对象,包括数组,都是关联容器”这一点)
通常需要两种容器:映射和数组
映射是按照上面的示例创建的(使用“o=newobject();”或“o={};”表示法),必须通过其属性进行访问
数组是以不同的方式创建的,即使它们可以作为映射进行访问,也只能通过它们的索引进行访问,以确保保持顺序
重点是:
- 如果需要贴图,请使用“new Object()”容器
- 如果需要数组,请取消对数组的调用,使用“new array()”容器
- 不要将两者混用,也不要通过索引访问地图,对于数组,总是通过索引访问其数据,因为如果你不遵循这些原则,你将无法得到你想要的
循环是否按照定义的顺序进行迭代?请参阅我刚才添加到回答中的文本。“实际上,您会发现几乎所有浏览器都保持字段名的顺序”。即使您添加了更多字段?随着对象的修改,新字段名也会添加到列表的末尾。这一点很好。在太多的库中(常用库!)我看到过这样的错误吗?something=[]
或something=newarray()
后跟something['key']=123
。示例包括WMD(此处使用的实时标记编辑器)和jQuery UI。可能值得解释一下hasOwnProperty
的作用。OP可能需要第一个字段,包括在prototype
中定义的字段(但很可能他需要您的方法)请注意,其他答案是正确的,指出迭代顺序不能保证。@Hank Gay:谢谢你的评论。我在答案中添加了这个信息。