JavaScriptでオブジェクトの長さ(プロパティ数)を取得する方法
JavaScriptにおいて、オブジェクトには配列のような length プロパティが標準で用意されていません。そのため、オブジェクトの「長さ」、つまり保持しているプロパティの数を知りたい場合は、ひと工夫が必要です。
ここでは、次のような Student オブジェクトを例に説明していきます。
var studentObject = new Object(); studentObject["studentFirstName"] = "John"; studentObject["studentLastName"] = "Doe"; studentObject["studentAge"] = 22; studentObject["studentCountryName"] = "US"; studentObject["studentCollegeName"] = "MIT"; studentObject["studentSubjectName"] = "JavaScript";
このオブジェクトの長さを求めてみましょう。
オブジェクトの長さを求める基本的な考え方
オブジェクトに含まれるキー(プロパティ名)を順番に調べ、キーが存在するたびにカウンター変数を1ずつ増やします。そして、for ループが完了した時点でカウンターの値を返せば、それがオブジェクトの長さとなります。
ポイントは、hasOwnProperty() メソッドを組み合わせることです。for...in ループはプロトタイプチェーン上のプロパティまで列挙してしまう可能性があるため、このメソッドで「そのオブジェクト自身が持つプロパティ」だけをカウント対象にすることで、正確な数を取得できます。
コード例
var studentObject = new Object();
studentObject["studentFirstName"] = "John";
studentObject["studentLastName"] = "Doe";
studentObject["studentAge"] = 22;
studentObject["studentCountryName"] = "US";
studentObject["studentCollegeName"] = "MIT";
studentObject["studentSubjectName"] = "JavaScript";
Object.findLength = function (stObject) {
var counter = 0, k;
for (k in stObject) {
if (stObject.hasOwnProperty(k))
counter++;
}
return counter;
};
var lengthOfStudentObject = Object.findLength(studentObject);
console.log("The length Student Object is=" + lengthOfStudentObject);
上記のプログラムを実行するには、次のコマンドを使用します。
node fileName.js.
ここでは、ファイル名を demo191.js としています。
実行結果
このプログラムを実行すると、次のような出力が得られます。
PS C:\Users\Amit\javascript-code> node demo191.js The length Student Object is=6
6つのプロパティが正しくカウントされ、オブジェクトの長さとして「6」が出力されていることがわかります。
補足:Object.keys() を使うよりシンプルな方法
ES5以降の環境では、Object.keys() メソッドを使うことで、さらに簡潔にプロパティ数を取得できます。
var length = Object.keys(studentObject).length; console.log(length); // 6
Object.keys() は、オブジェクト自身が持つ列挙可能なプロパティ名を配列として返します。その配列の length プロパティを参照するだけでプロパティ数がわかるため、可読性の面でもこちらの方法が推奨されます。独自の関数を定義する手間も不要になり、モダンなJavaScript開発では一般的にこちらが使われています。
-
JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説
オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars
-
JavaScriptオブジェクトを配列プロパティの長さで並べ替える方法
この記事では、各オブジェクトが持つ配列プロパティの要素数(length)を基準にして、JavaScriptのオブジェクトを並べ替える方法を解説します。 ポイントとなる仕組み 並べ替えには Array.prototype.sort() メソッドを使用します。sort() の引数として比較関数(コンパレータ)を渡し、2つのオブジェクトの配列プロパティの length を比較することで、要素数の少ない順(昇順)にソートできます。比較関数は、条件を満たす場合に 1 を、満たさない場合に -1 を返すように記述します。 サンプルコード <!DOCTYPE html> <html la