web-dev-qa-db-ja.com

オブジェクトの長さを取得する方法

オブジェクトの長さを返すことができる組み込み関数はありますか?

たとえば、a = { 'a':1,'b':2,'c':3 }が返されるはずの3があります。私がa.lengthを使用するならば、それはundefinedを返します。

それは単純なループ関数かもしれませんが、私は組み込み関数があるかどうか知りたいですか?

これに関連した質問があります( JSONオブジェクトの長さ ) - ユーザーがオブジェクトを配列に変換することをお勧めします。

263
Larry Cinnabar

Object.keys() をサポートしているブラウザの場合は、次のようにします。

Object.keys(a).length;

それ以外の場合(特にIE <9の場合)、for (x in y)ループを使用してオブジェクトを自分でループ処理できます。

var count = 0;
var i;

for (i in a) {
    if (a.hasOwnProperty(i)) {
        count++;
    }
}

hasOwnPropertyは、オブジェクトリテラルからプロパティを数えるだけで、プロトタイプから「継承する」プロパティは数えないようにするためのものです。

528
David Tang

これはそれをするはずです:

Object.keys(a).length

ただし、Object.keysはIE8以下、OperaおよびFF 3.6以下ではサポートされていません。

ライブデモ: http://jsfiddle.net/simevidas/nN84h/

65
Šime Vidas

$.map() で簡単に実行できます。

var len = $.map(a, function(n, i) { return i; }).length;
58
Fazle Rabbi

underscore.js http://underscorejs.org/docs/underscore.html )を見ていますか?これは便利な方法がたくさんあるユーティリティライブラリです。コレクションのsizeメソッドと、toArrayメソッドがあります。

_.size({one : 1, two : 2, three : 3});
=> 3
44

まとめると、これは普遍的な機能です(ie8サポートを含む)。

var objSize = function(obj) {
    var count = 0;
    
    if (typeof obj == "object") {
    
        if (Object.keys) {
            count = Object.keys(obj).length;
        } else if (window._) {
            count = _.keys(obj).length;
        } else if (window.$) {
            count = $.map(obj, function() { return 1; }).length;
        } else {
            for (var key in obj) if (obj.hasOwnProperty(key)) count++;
        }
        
    }
    
    return count;
};

document.write(objSize({ a: 1, b: 2, c: 3 }));
// 3
19
tibalt

JQueryでは、私はそのようにしました:

len = function(obj) {
    var L=0;
    $.each(obj, function(i, elem) {
        L++;
    });
    return L;
}
9
Larry Cinnabar

そのため、Object.keysメソッドを見つけて置き換える必要はありません。もう1つの方法は、スクリプトの実行の初期段階でこのコードを使用することです。

if(!Object.keys)
{
  Object.keys = function(obj)
  {
    return $.map(obj, function(v, k)
    {
      return k;
    });
  };
 }
6
Robert Brisita

これがInnuendoの答えのjQueryベースの関数で、すぐに使用できます。

$.extend({
    keyCount : function(o) {
        if(typeof o == "object") {
            var i, count = 0;
            for(i in o) {
                if(o.hasOwnProperty(i)) {
                    count++;
                }
            }
            return count;
        } else {
            return false;
        }
    }
});

このように呼ぶことができます:

var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;
4
Andrew Plank

もう一つの答え:

var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]';

obj = Object.keys(j).length;
console.log(obj)
3

ここに来る人たちがすでに jQueryオブジェクトであるもののアイテム数を見つけるために
。長さはあなたが探しているものです:

例:

len = $('#divID').length;
alert(len);
2
Jpsy

新しい依存関係を避けたい場合は、独自のスマートオブジェクトを作成することができます。もちろん、それだけのサイズにするためにもっと多くのことをしたい場合に限ります。

MyNeatObj = function (obj) {
  var length = null;

  this.size = function () {
    if (length === null) {
      length = 0;
      for (var key in obj) length++;
    }
    return length;
  }
}

var thingy = new MyNeatObj(originalObj);
thingy.size();
1
doublejosh

オブジェクトに未定義のプロパティがある可能性があります。 Object.keys(data).lengthのメソッドを使用している場合は、それらのプロパティもカウントされます。

あなたはそれらを除外したいかもしれません。

Object.keys(data).filter((v) => {return data[v] !== undefined}).length
0
Yaki Klein

このようにすることもできます:

Object.entries(obj).length

例えば:

let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]
0