JavaScript如何查找对象中子元素的数量

14

除了运行循环并使用计数器之外,有没有一种方法来查找JavaScript对象中子元素的数量?如果有助于解决问题,我可以利用jQuery。我正在这样做:

有没有一种方法可以在不使用循环和计数器的情况下查找JavaScript对象中子元素的数量?如果需要,我可以使用jQuery。这是我的代码:

var childScenesObj = [];
var childScenesLen = scenes[sceneID].length; //need to find number of children of scenes[sceneID]. This obviously does not work, as it an object, not an array.


for (childIndex in scenes[sceneID].children) {
    childSceneObj = new Object();
    childSceneID = scenes[sceneID].children[childIndex];
    childSceneNode = scenes[childSceneID];
    childSceneObj.name = childSceneNode.name;
    childSceneObj.id = childSceneID;
    childScenesObj  .push(childSceneObj);
}

1
等待抓住基于jQuery的答案... - jondavidjohn
在循环中的每次迭代中,您都在创建一个新的childScenesObj,然后将其推送到自身。我认为这样做不会奏效。您需要在其中添加另一个var - Soatl
你是在询问DOM元素还是普通的JavaScript对象? - Matt Ball
2个回答

43

以下代码适用于ECMAScript5(Javascript 1.85)

var x = {"1":1, "A":2};
Object.keys(x).length; //outputs 2

0
如果该对象实际上是一个数组,.length 总是可以得到索引的数量。如果你指的是一个对象,并且想要获取对象中属性/键的数量,除了使用计数器之外,我不知道其他方法。
var myArr = [];
alert(myArr.length);// 0
myArr.push('hi');
alert(myArr.length);// 1

var myObj = {};
myObj["color1"] = "red";
myObj["color2"] = "blue";

// only way I know of to get "myObj.length"
var myObjLen = 0;
for(var key in myObj)
  myObjLen++;

你需要在for...in循环中使用Object.hasOwnProperty来过滤原型中的可枚举属性。 - Matt Ball
你能否发布一个演示这个需求的 fiddle 呢?我以前从未遇到过键枚举的问题,非常想看看它... - Brian
类似这样的代码:for(var key in obj) if((Object.prototype.hasOwnProperty.call(obj,key) && Object.prototype.propertyIsEnumerable.call(obj,key)) length++; 这是防止糟糕代码的证明 :) - Eliu
@Matt Ball - 你的 JSFiddle 在 IE 和 FFX 中出现了错误。 - Brian
这是错误的。数组的长度属性返回其最大索引,而不是索引的数量。对于对象,请使用Object.keys(myObj).length - Aluan Haddad
如果那个“Object”实际上是一个“Array”,那么它就是一个“Array”,而不是一个“Object”... - Lathryx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接