JavaScript オブジェクトをループする:keys・values・entries

スポンサーリンク

JavaScript オブジェクトをループする:keys・values・entries

オブジェクトのキーや値を繰り返し処理するには Object.keys()Object.values()Object.entries() を使います。


早わかりまとめ

メソッド 返す内容 向いている用途
Object.keys() キーの配列 キー一覧を取得・ループ
Object.values() 値の配列 値だけ処理したい
Object.entries() [key, value] の配列 キーと値の両方を使う

Object.keys():キーの配列を取得する

const user = { name: 'Alice', age: 25, active: true }

Object.keys(user)
// ['name', 'age', 'active']

// ループ
Object.keys(user).forEach((key) => {
  console.log(key, user[key])
})
// name Alice
// age 25
// active true

Object.values():値の配列を取得する

const scores = { math: 80, english: 75, science: 90 }

Object.values(scores)
// [80, 75, 90]

// 合計を計算
const total = Object.values(scores).reduce((sum, score) => sum + score, 0)
console.log(total) // 245

Object.entries():キーと値をセットで扱う

const prices = { apple: 100, banana: 80, cherry: 200 }

Object.entries(prices)
// [['apple', 100], ['banana', 80], ['cherry', 200]]

// 分割代入でキーと値を取り出す
Object.entries(prices).forEach(([item, price]) => {
  console.log(`${item}: ${price}円`)
})
// apple: 100円
// banana: 80円
// cherry: 200円

税込み価格のオブジェクトを作り直す

const withTax = Object.fromEntries(
  Object.entries(prices).map(([item, price]) => [item, Math.round(price * 1.1)])
)
console.log(withTax) // { apple: 110, banana: 88, cherry: 220 }

Object.fromEntries()[key, value] の配列をオブジェクトに戻せます。


for...in は使わない

for...in はプロトタイプチェーンのプロパティまで列挙してしまうため、オブジェクトのループには向いていません。

// NG:プロトタイプのプロパティまで拾う場合がある
for (const key in user) {
  console.log(key)
}

// OK:Object.keys / Object.entries を使う
Object.keys(user).forEach((key) => {
  console.log(key)
})

まとめ

したいこと 使うもの
キー一覧を取得 Object.keys(obj)
値一覧を取得 Object.values(obj)
キーと値の両方を使う Object.entries(obj)
エントリ配列をオブジェクトに戻す Object.fromEntries(entries)

配列のループ処理は「JavaScript 配列の繰り返し:forEach・map・for...of の使い分け」も参照してください。