2012-03-12 10 views
2

数字以外のインデックスを持つ配列全体を反復処理せずに配列の長さを取得できますか?非数値インデックス配列の長さ?

数値でないインデックス付き配列の場合、Lengthプロパティは常に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

答えて

6

配列は数値インデックスを表します。

他のプロパティを追加することはできますが、長さには影響しません。Array.prototypeのメソッドは無視します。

あなたが{}(オブジェクト)を使用する必要があり、数字以外のプロパティを使用している、とあなた自身の.lengthを維持する必要があります場合。

代わりに、あなたは

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

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

のECMAScript 5サポートしていないブラウザでは、互換性のパッチが必要になります...がありますどのように多くの性質を調べるためにObject.keysメソッドを使用することができます...

0

オーケー問題は、あなたが、配列に値を追加していないですので、あなたが追加しているPオブジェクトへの輪郭。オブジェクトのネイティブプロパティの数を取得する限り、Object.keys(arr).lengthを使用できます。

関連する問題