JavaScript - 获取关联数组中元素的名称

Ari*_*iod 11 javascript arrays

我有一个被视为关联数组的JavaScript对象.我们称之为"领域".它有几个要素,例如:

fields['element1'] = ...
fields['element2'] = ...
fields['element3'] = ...
Run Code Online (Sandbox Code Playgroud)

给定字段[0],是否可以获取属性的名称("element1")而不是其值?

pae*_*bal 19

假设你有一个对象oObject.它可能是:

var oObject = {} ;
oObject["aaa"] = "AAA" ;
oObject["bbb"] = "BBB" ;
oObject["ccc"] = "CCC" ;
oObject["ddd"] = "DDD" ;
oObject["eee"] = "EEE" ;
Run Code Online (Sandbox Code Playgroud)

现在,假设你想知道它的属性的名称和值,放入变量strName和strValue.为此,您使用"for(x in o)"构造,如下例所示:

var strName, strValue ;

for(strName in oObject)
{
   strValue = oObject[strName] ;
   alert("name : " + strName + " : value : " + strValue) ;
}
Run Code Online (Sandbox Code Playgroud)

"for(x in o)"构造将迭代对象"o"的所有属性,并且在每次迭代时,将变量"x"放入当前属性名称.那么,你需要做的就是写出o [x],但你已经知道了.

附加信息

经过一番思考,看到Hank Gay的评论后,我觉得其他信息可能很有趣.

让我们天真(并忘记"在JavaScript中,所有对象,包括数组,都是关联容器"的事情).

您通常需要两种容器:地图和阵列.

如上例所示创建地图(使用"o = new Object();"或"o = {};"表示法,并且必须通过其属性访问.当然,地图是地图,不保证订购.

数组的创建方式不同,即使它们可以作为地图访问,也只能通过索引访问它们,以确保维护顺序.

要点是:

  • 如果需要地图,请使用"new Object()"容器
  • 如果您需要一个数组,而不是数组,请使用"new Array()"容器
  • 不要混淆两者,也不要通过索引访问地图,对于数组,总是通过索引访问数据,因为如果你不遵循这些原则,就不会得到你想要的东西.


Que*_*tin 8

不,有两个原因.

  1. fields [0]和fields ["element1"]是不同的属性.
  2. 对象中的属性显式无序

你可以遍历属性:

function (obj) {
  for (prop in obj) {
    if (obj.hasOwnProperty(prop) {
      return prop;
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

...获得"第一"任意值的"第一"属性,可随时改变.

http://ajaxian.com/archives/fun-with-browsers-for-in-loop解释了hasOwnProperty模式.