【问题标题】:To count the number of objects in object literal using Jquery使用 Jquery 计算对象文字中的对象数量
【发布时间】:2012-11-27 23:40:42
【问题描述】:

代码:

var animals = {
                    "elephant": {
                                    "name" : "Bingo",
                                    "age" : "4"
                                },
                    "Lion":     {
                                    "name" : "Tango",
                                    "age" : "8"
                                },
                    "Tiger":    {
                                    "name" : "Zango",
                                    "age" : "7"
                                }
                }

我想在这个对象字面量中使用 Jquery 计算对象的数量。

【问题讨论】:

    标签: javascript jquery jquery-ui object object-literal


    【解决方案1】:

    你不能使用数组吗?

    无论如何,在一个对象中,你可以这样做:

    Object.prototype.length = function() {
        var count = 0, k=null;
        for (k in this) {
            if (this.hasOwnProperty(k)) count++;
        }
        return count;
    }
    console.log( animals.length() );
    

    【讨论】:

    • 如果他需要命名他的属性,他不能使用数组,并且修改对象原型不是一个好的做法,特别是如果有一个 Objects 方法可以用于此-> Object.keys 给你一个包含键名的数组,然后有一个长度属性
    • Object.keys 是 EcmaScript 5 标准,不适用于 IE8 或 lt。无论如何,您可以使用 Array 并命名您的属性: var things = []; things['someShit'] = '你好'; things['someShit2'] = '世界!'; console.log(things.someShit+' '+things.someShit2);
    • 好吧,给数组命名键也是一个坏主意,因为它会破坏一些数组方法,如 slice 或 forEach(它们只会忽略命名键),而且你必须使用 Object.键()。长度或使用键进行迭代以获得正确的长度,仅举几例,她在jsbin.com/anixap/1/edit 工作,拼写,我在移动端
    【解决方案2】:

    你可以使用Object.keys(animals).length

    或者

    var count = 0;
    for (var animal in animals) {
        if (animals.hasOwnProperty(animal)) {
            count++;
        }
    }
    // `count` now holds the number of object literals in the `animals` variable
    

    或者是许多可能是也可能不是最有效的 jQuery 解决方案之一:

    var count = $.map(animals, function(n, i) { return i; }).length;
    

    【讨论】:

      【解决方案3】:

      如果你想要一些跨浏览器的东西,也可以在 IE8 上运行,你不能以一种非常干净的方式来做(参见compatibility of the keys property)。

      我建议这样做:

      var n = 0;
      for (var _ in animals) n++;
      

      (因为它是一个对象字面量,不需要hasOwnProperty)

      【讨论】:

      • 是的,因为使用 Object polyfill 并污染原型是不可能的……最好是安全的。
      • 这并非不可能,但您的代码不应该防范精神错乱。任何理智的人向对象的原型添加属性至少会使其不可枚举......
      • 精神错乱?是的,这太疯狂了!
      • 除了Object.defineProperty,你还能怎么定义一个不可枚举的属性呢? (只是想知道,我不确定)
      • Object.create 但要修改 Object 的原型(我不习惯),我认为您必须使用 defineProperty。
      猜你喜欢
      • 2015-11-22
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多