Javascript 对象中的元素数

有没有一种方法可以(从某个地方)获得 Javascript 对象中的元素数量? ? (即常量时间复杂度)。

我找不到检索该信息的属性或方法。到目前为止,我只能考虑对整个集合进行一次迭代,但这是线性时间。
奇怪的是,没有直接的方法来测量物体的大小,你不觉得吗。

编辑:
我说的是 Object对象(不是一般的对象) :

var obj = new Object ;
208720 次浏览

数字/长度/维度的概念对一个 Object 来说并不真正有意义,并且需要它表明你真的需要一个 Array 给我。

编辑: 向我指出你想要一个 O (1)。据我所知,恐怕不存在这种方式。

AFAIK,没有办法可靠地做到这一点,除非你切换到一个数组。说实话,没有看起来很奇怪——对我来说,数组是可数的,而对象不是。

也许你能得到的最接近的就是这样的东西

// Monkey patching on purpose to make a point
Object.prototype.length = function()
{
var i = 0;
for ( var p in this ) i++;
return i;
}


alert( {foo:"bar", bar: "baz"}.length() ); // alerts 3

但这会产生问题,或者至少是问题。计算所有用户创建的属性,包括 _ length 函数本身!虽然在这个简单的示例中,您可以通过使用普通函数来避免这种情况,但这并不意味着您可以阻止其他脚本执行此操作。那你是做什么的?忽略函数属性?

Object.prototype.length = function()
{
var i = 0;
for ( var p in this )
{
if ( 'function' == typeof this[p] ) continue;
i++;
}
return i;
}


alert( {foo:"bar", bar: "baz"}.length() ); // alerts 2

最后,我认为你应该放弃使你的对象可数的想法,找到另一种方法来做你正在做的事情。

尽管 JS 实现可能会在内部跟踪这样的值,但是没有获取它的标准方法。

在过去,Mozilla 的 Javascript 版本公开了 非标准 __count__,但是在1.8.5版本中删除了它。

对于跨浏览器脚本,你必须显式地遍历属性并检查 hasOwnProperty():

function countProperties(obj) {
var count = 0;


for(var prop in obj) {
if(obj.hasOwnProperty(prop))
++count;
}


return count;
}

对于支持 ECMAScript 5的实现,这也可以写成(值得称赞的是 阿维 · 亚麻)

function countProperties(obj) {
return Object.keys(obj).length;
}

请记住,您还将错过不可枚举的属性(例如数组的 length)。

如果你使用一个像 jQuery,Prototype,Mootools,$whatever-the-new-hyp 这样的框架,检查它们是否有自己的集合 API,这可能是比使用本地 JS 对象更好的解决方案。

function count(){
var c= 0;
for(var p in this) if(this.hasOwnProperty(p))++c;
return c;
}


var O={a: 1, b: 2, c: 3};


count.call(O);

在任何兼容 ES5的环境中执行此操作

Object.keys(obj).length

(来自 给你的浏览器支持)
(Doc on Object.keys 给你,包括可以添加到非 ECMA5浏览器的方法)

如果你已经在构建中使用了 jQuery,只需要这样做:

$(yourObject).length

它在对象上工作得很好,而且我已经有了 jQuery 作为依赖项。

使用 jquery:

$(parent)[0].childElementCount