我有一个包含子数组的父数组。父数组上的length
属性显示0结果,即使存在子数组也是如此。
以下是代码:
var balances = [];
balances['kanav'] = 50;
balances['yash'] = 50;
alert(balances.length);
console.log(balances);

原因是什么?
答案 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;
答案 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);