2012-05-17 14 views
5

の長さを取得:は、私は次のオブジェクト持つオブジェクト

var l={"a":1,"b":2,"c":5}; 

を私はこの

alert(l.length); 

の長さを取得したいが、それはundefinedを返します。明らかに私は答えとして3を得るために探しています。誰か助けてくれますか?

+9

これはオブジェクトであり、配列ではありません。 – x1a4

+0

これはデモンストレーションコードだと思っていますが、名前として小文字のLを使用すると、変数をナンバーワンと混同する簡単な方法と言えるでしょうか? – Blazemonger

+0

@Blazemonger:シンボルを混乱させることに懸念があるなら、より良いフォント/シンタックスハイライターが必要です。ツールが貧弱なためにコードを変更しないでください。 – Eric

答えて

11

あなたは、オブジェクト内のキーの配列を返しますObject.keys()を使用して、オブジェクト、内のエントリの数を数えることができます。しかし、それはより効率的(かつクロスブラウザ)であるかもしれない

var l = {a: 1, b: 2, c: 3}; 
Object.keys(l).length; 

私はあなたが、私ディl.length()を書くことができるように、Object.prototype.lengthとしての機能を定義している可能性がその

Object.length = function(obj) { 
    var i = 0; 
    for(var key in obj) i++; 
    return i; 
} 

Object.length(l); 

注:独自のプロパティを実装しますあなたのオブジェクトコンテナのキーがlengthの場合には失敗します。

+1

'Object.keys()'がES5なので、ブラウザのサポートは厄介です。 – jmar777

+0

IE版<= 8で動作しません。 –

+1

@ jmar777 [Polyfill it](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Object/keys#Compatiblity)。 – Blazemonger

1
var l={"a":1,"b":2,"c":5}; 
Object.keys(l).length; 
+0

以前の投稿からメモを追加する:これはすべてのブラウザでサポートされていません。 – patrick

1
function count(O){ 
    for(var p in O){ 
     if(O.hasOwnProperty(p))++cnt; 
    } 
    return cnt; 
} 
count(l); 
関連する問題