【问题标题】:Get items quantity in js object [duplicate]获取js对象中的项目数量[重复]
【发布时间】:2013-02-10 17:13:09
【问题描述】:

我需要获取 js 对象属性计数。

我搜索并找到了这样的解决方案:

var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
var count = 0;
for (var k in foo) {
    if (foo.hasOwnProperty(k)) {
      ++count;
    }
}

问题:为什么需要条件if (foo.hasOwnProperty(k)) {

我认为这段代码必须始终运行良好,也没有这种情况。

我错了吗?

【问题讨论】:

标签: javascript


【解决方案1】:

看到这个:How to efficiently count the number of keys/properties of an object in JavaScript?

是的,hasOwnProperty 方法在这里确实是多余的。

无论如何,为什么您需要获取属性计数?恐怕你解决问题的方法不好。

【讨论】:

  • 如果你想避免计算继承的成员,这并不是多余的。希望没有人向Object.prototype 添加成员,但确实会发生(包括在流行的 JavaScript 框架的旧版本中)。
  • @user1660584 Anyway, why you need to get properties count? I'm afraid you are solving something a bad way. --- 我从 php 获取关联数组到 js,我需要在 js 中获取这个数组计数。谢谢,谢谢大家
【解决方案2】:

某些对象具有系统添加的属性(即原型)。

您通常不想计算这些。您询问的条件将确保您只计算属于您的对象本身的属性。

因此,如果您打算创建一个返回任何对象计数的函数,最好包含条件,否则您不一定需要。

【讨论】:

    【解决方案3】:

    这是为了防止你统计继承的成员。

    如果你这样做(不建议):

    Object.prototype.x = 1;
    

    那么这给出了 4 的计数:

    var foo = {"key1": "value1", "key2": "value2", "key3": "value3"};
    var count = 0;
    for (var k in foo) {
      ++count;
    } 
    

    if (foo.hasOwnProperty(k)) 仍然给出 3。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2021-12-31
      • 2014-11-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多