即使Array.length包含值--Javascript,它也是0

时间:2015-10-10 11:05:02

标签: javascript arrays multidimensional-array

我有一个包含子数组的父数组。父数组上的length属性显示0结果,即使存在子数组也是如此。

以下是代码:



var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;

alert(balances.length);
console.log(balances);




原因是什么?

4 个答案:

答案 0 :(得分:6)

length属性仅适用于作为数值的Array属性。数组只是具有特殊长度属性的对象,以及从 Array.prototype 继承的一些方便的方法。

当您添加 kanav yash 等属性时,它们会被添加为普通对象属性,而不是索引,因此不会影响长度



var arr = [];

// Add plain object properties
arr.foo = 'foo';
arr.bar = 'bar';

document.write(arr.length) // 0

// Add some numeric properties
// Since they are numbers, square bracket notation must be used
arr[9] = 9;

document.write('<br>' + arr.length) // 10
&#13;
&#13;
&#13;

答案 1 :(得分:1)

在你的例子中,balances不是一个数组,它实际上是一个关联数组(它们都是两个对象,但它们有不同的方法)。

如果你想使用数组,你可以

var balances = [
    ["kanav", 50],
    ["yash", 50]
];
alert(balances.length);
console.log(balances);

如果你想保持当前的格式,你必须遍历对象来计算它们

var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;

var i=0;
for(var key in balances) {
    if(balances.hasOwnProperty(key)) {
        i++;
    }
}
console.log(i);

答案 2 :(得分:1)

您正在将数组用作json对象,但数组处理索引或推送函数。因此,如果以这种方式使用它,它将产生正确的结果。

var balances = [];
balances.push('something');
balances.push('another');

alert(balances.length);
console.log(balances);

或者在这种语法中:

var balances = [];
balances[0] = 50;
balances[1] = 50;

alert(balances.length);
console.log(balances);

答案 3 :(得分:0)

balances是一个关联数组。 根据{{​​3}}帖子,您可以通过以下方式获取其长度:

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key))
            size++;
    }
    return size;
};

var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;

alert(Object.size(balances));
console.log(balances);