オブジェクトの長さを返すことができる組み込み関数はありますか?
たとえば、a = { 'a':1,'b':2,'c':3 }
が返されるはずの3
があります。私がa.length
を使用するならば、それはundefined
を返します。
それは単純なループ関数かもしれませんが、私は組み込み関数があるかどうか知りたいですか?
これに関連した質問があります( JSONオブジェクトの長さ ) - ユーザーがオブジェクトを配列に変換することをお勧めします。
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
は、オブジェクトリテラルからプロパティを数えるだけで、プロトタイプから「継承する」プロパティは数えないようにするためのものです。
これはそれをするはずです:
Object.keys(a).length
ただし、Object.keys
はIE8以下、OperaおよびFF 3.6以下ではサポートされていません。
$.map()
で簡単に実行できます。
var len = $.map(a, function(n, i) { return i; }).length;
underscore.js ( http://underscorejs.org/docs/underscore.html )を見ていますか?これは便利な方法がたくさんあるユーティリティライブラリです。コレクションのsize
メソッドと、toArrayメソッドがあります。
_.size({one : 1, two : 2, three : 3});
=> 3
まとめると、これは普遍的な機能です(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
JQueryでは、私はそのようにしました:
len = function(obj) {
var L=0;
$.each(obj, function(i, elem) {
L++;
});
return L;
}
そのため、Object.keysメソッドを見つけて置き換える必要はありません。もう1つの方法は、スクリプトの実行の初期段階でこのコードを使用することです。
if(!Object.keys)
{
Object.keys = function(obj)
{
return $.map(obj, function(v, k)
{
return k;
});
};
}
これが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;
もう一つの答え:
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)
ここに来る人たちがすでに jQueryオブジェクトであるもののアイテム数を見つけるために :
。長さはあなたが探しているものです:
例:
len = $('#divID').length;
alert(len);
新しい依存関係を避けたい場合は、独自のスマートオブジェクトを作成することができます。もちろん、それだけのサイズにするためにもっと多くのことをしたい場合に限ります。
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();
オブジェクトに未定義のプロパティがある可能性があります。 Object.keys(data).length
のメソッドを使用している場合は、それらのプロパティもカウントされます。
あなたはそれらを除外したいかもしれません。
Object.keys(data).filter((v) => {return data[v] !== undefined}).length
このようにすることもできます:
Object.entries(obj).length
例えば:
let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]