2012-03-12 81 views
2

是否有可能得到一个数组的长度而不迭代包含非数字索引的完整数组?非数字索引数组的长度?

非数字索引数组的长度属性始终为0。

我们可以使用数组的另一个属性或它的原型获取元素的数量吗?

var arr = []; 
arr['first'] = 1; 
arr['second'] = 2; 
console.log(arr.length); //0 
+1

它不是一个数组,它只是一个具有属性的对象。 arr ['first']与arr.first相同。 也是这个问题,它可以帮助你:http://stackoverflow.com/questions/5223/length-of-javascript-associative-array – bhamlin 2012-03-12 18:45:19

回答

6

数组是指数字指数。

您可以添加其他属性,但它们对长度没有影响,并且Array.prototype的方法将忽略它们。

如果您使用非数字属性,您应该使用{}(对象),和你需要维护自己的.length

或者,你可以使用Object.keys方法来找出有多少性能有...

var obj = {}; 
obj['first'] = 1; 
obj['second'] = 2; 

var n = Object.keys(obj).length; // 2 

对于不支持的ECMAScript 5的浏览器,你需要一个兼容性补丁...

0

好了,问题是你不能添加值的数组,你加入对roperties到对象。至于获得一个对象的本地属性的数量,你可以使用Object.keys(arr).length