2012-03-12 90 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