2012年11月27日火曜日

[JavaScript]Objectをループしたい時はObject.keys()が便利

Objectをループで回す時はfor ~ inを使うのが定番だけど、そのままだとオブジェクトのプロトタイプをさかのぼってすべてのプロパティを見てしまうのでちょっとした工夫が必要になる。
こんな感じ。
var hoge = {
  a: 'paramA',
  b: 'paramB'
};
for (var key in hoge) {
  if (hoge.hasOwnProperty(key)){
    console.log(key + 'is property of hoge!');
  }
}

これだとループの中で毎回hoge.hasOwnProperty()が呼び出されるので、ちょっと遅くなってしまう。
そこで、Object.keys()の出番である。
Object.keys()は引数に渡したオブジェクトのプロパティだけを配列で返してくれる。
使い方はこんな感じ。

var hoge = {
  a: 'paramA',
  b: 'paramB'
};
var hogeKeys = Object.keys(hoge);

for (var i = 0, len = hogeKeys.length; i < len; i++) {
    console.log(hogeKeys[i] + 'is property of hoge!');
}

この方法だとループの中でhoge.hasOwnProperty()を呼ばなくていいからちょっと早い。

0 件のコメント:

コメントを投稿