如何查找文字数组的长度?

时间:2011-01-07 16:42:48

标签: javascript

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

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

document.write(array.length);

8 个答案:

答案 0 :(得分:7)

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

执行此语法array["foo"] = "bar"时,您将创建一个名为foo的属性,其值为bar。由于您尚未向Array添加任何内容,因此长度仍为0,您只需在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,它是数组中所有属性和项目数。

答案 1 :(得分:6)

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

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/

答案 2 :(得分:4)

您正在数组上设置属性,而不是为其提供新元素。与任何其他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 =&gt;值对,请改为使用对象:

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

答案 3 :(得分:1)

基本上当你做

array["foo"] = "bar"

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

答案 4 :(得分:0)

也许我天真(我的javascript不是它可能是什么),但不应该是这样的:

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

如上所述,你不是在处理一个数组而是一个对象。有关如何计算对象中属性的说明,请参阅How to efficiently count the number of keys/properties of an object in JavaScript?。(在问题本身中)。

答案 7 :(得分:0)

Object.keys(阵列)。长度

请参阅:https://stackoverflow.com/a/13802999/1488217

学分归于伊恩