【问题标题】:How to find length of literal array?如何找到文字数组的长度?
【发布时间】:2011-01-07 16:42:48
【问题描述】:

那么,为什么这会导致 0 以及如何找到实际大小?

var array = [];
array["foo"] = "bar";
array["bar"] = "foo";

document.write(array.length);

【问题讨论】:

    标签: javascript


    【解决方案1】:

    首先,长度为 0,因为 array 中的项目数为 0。

    当您执行此语法array["foo"] = "bar" 时,您将创建一个名为foo 的属性,其值为bar。长度仍然为 0,因为您没有向 Array 添加任何内容,您只是在 Array 上设置了新属性

    这里的工作版本:http://jsfiddle.net/VyjJD/3/

    var array = [];
    
    array["foo"] = "bar";
    array["bar"] = "foo";
    array.bin = function() { return "bin"; };
    
    array[0] = "bar";
    array[1] = "foo";
    array[2] = "bin";
    array[3] = "bat";
    
    var props = 0;
    
    for (key in array)
        props++;
    
    document.write(array.length + "<br />" 
               + props + "<br />" 
               + (array.foo == array["foo"]) + "<br />" 
               + array.bar + "<br />"
               + array.bin());
    

    注意array.length = 4props = 7 是数组中的所有属性和项目数。

    【讨论】:

      【解决方案2】:

      由于这是一个对象,它由属性组成,并采用键/值对的形式(在概念上类似于关联数组或哈希表),因此您必须执行以下操作:

      Object.size = function(obj) {
          var size = 0, key;
          for (key in obj) {
              if (obj.hasOwnProperty(key)) size++;
          }
          return size;
      };
      
      var array = [];
      array["foo"] = "bar";
      array["bar"] = "foo";
      
      var size = Object.size(array);
      

      演示:http://jsfiddle.net/gBG34/

      【讨论】:

      • 或者也可以:Object.prototype.size = function()... 然后你可以像这样使用它:var size = array.size()
      • ...或作为一个普通的函数,只需执行getSize(var);
      • JS 中没有关联数组这种东西。它是一个对象,只是访问其属性的另一种语法。你也可以写array.foo,而不是array["foo"]。这就是长度属性不起作用的原因。他在数组对象上设置属性,而不是向数组中添加项目。
      • @DanMan 很公平,但是我如何找到数组有多少属性呢?
      • @DanMan - 但您可以将其视为一个。同样,您可以将其称为“哈希表”。我知道可以使用方括号和点符号来访问“属性”。
      【解决方案3】:

      您在数组上设置一个属性,而不是给它一个新元素。数组可以接收任意属性,就像任何其他 Javascript 对象一样。例如:

      var foo = [];
      foo.bar = 'foobar';
      console.log(foo.bar); // outputs 'foobar'
      console.log(foo); // outputs [] -- empty array
      

      要将项目添加到数组中,请使用Array.push

      var foo = [];
      foo.push('foobar');
      console.log(foo); // outputs ['foobar']
      

      如果您想要 key=>value 对,请改用对象:

      var foo = {};
      foo['bar'] = 'foobar';
      console.log(foo); // outputs {bar: 'foobar'}
      

      【讨论】:

        【解决方案4】:

        基本上当你这样做时

        array["foo"] = "bar"

        它只是为数组添加了更多属性,这是一个对象。在 javascript 中,array.foo 和 array['foo'] 含义相同。

        【讨论】:

        • 感谢您清除它。但它没有回答问题?
        • 它不会将其转换为对象。数组对象,所以你可以在它们上设置任意属性。
        【解决方案5】:

        也许我太天真了(我的 javascript 不是它可能的样子),但它不应该是这样的吗:

        var array = [];
        array[0] = "bar";
        array[1] = "foo";
        document.write(array.length);
        

        【讨论】:

          【解决方案6】:

          实际大小为 0,因为您没有将任何项目放入数组对象中 - 这只能通过方法(推送等)或通过将值分配给索引属性(或在构造函数中)来完成。

          【讨论】:

            【解决方案7】:

            Object.keys(array).length

            看到这个:https://stackoverflow.com/a/13802999/1488217

            学分归于 ian

            【讨论】:

              猜你喜欢
              • 2011-05-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-27
              • 2021-10-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多