collections - javascript obj中的元素数

有没有办法从某个地方获取javascript对象中的元素数量? (即恒定时间复杂度)。

我找不到检索该信息的属性或方法。 到目前为止,我只能想到在整个集合中进行迭代,但这是线性时间。
奇怪的是,没有直接访问对象的大小,你不觉得。

编辑:
我在谈论Object对象(一般不是对象):

var obj = new Object ;
6个解决方案
134 votes

虽然JS实现可能会在内部跟踪这样的值,但是没有标准的方法来实现它。

在过去,Mozilla的Javascript变种暴露了非标准的length,但它已被1.8.5版本删除。

对于跨浏览器脚本编写,您可能会明确地迭代属性并检查length

function countProperties(obj) {
    var count = 0;

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

    return count;
}

在支持ECMAScript 5的情况下,这也可以写成(Kudos to Avi Flax)

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

请记住,您还会遗漏不可枚举的属性(例如阵列的length)。

如果你正在使用像jQuery,Prototype,Mootools这样的框架,无论最新的炒作,请检查它们是否带有自己的集合API,这可能是比使用本机JS对象更好的解决问题的方法。

Christoph answered 2019-08-23T18:46:51Z
80 votes

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

Object.keys(obj).length

(这里的浏览器支持)
(此处有关于Object.keys的文档,包括可以添加到非ECMA5浏览器的方法)

ZelkiN answered 2019-08-23T18:47:29Z
11 votes

如果您已在构建中使用jQuery,请执行以下操作:

$(yourObject).length

它对我的对象很好用,我已经把jQuery作为依赖。

IndelibleHeff answered 2019-08-23T18:48:00Z
6 votes
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);
kennebec answered 2019-08-23T18:48:17Z
2 votes

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

最后,我认为你应该放弃让你的对象可数的想法,并想出另一种方法去做你正在做的事情。

Peter Bailey answered 2019-08-23T18:49:03Z
1 votes

数字/长度/维度的概念对于对象确实没有意义,并且需要它表明你真的想要一个数组给我。

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

annakata answered 2019-08-23T18:49:35Z
translate from https://stackoverflow.com:/questions/956719/number-of-elements-in-a-javascript-object