1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

objectをforEachしたい→Mapを使うという手もあるよ

Posted at

object.forEachと書きたいが…

Objectは直接forEachできないため、以下のように書く必要がある。

Object.keys(obj).forEach(key=>{/*keyを使った処理*/})

これでもいいのだが、連想配列にはObjectだけでなくMapも利用できるので、試してみよう。

Map型を使った場合

Mapを使った場合は以下のように書ける。

map.forEach((value, key)=>{/*keyとvalueを使った処理*/})

Map.prototypeから直接forEachが生えているので、若干短く書ける。
他にもMap型から直接使えるメソッドがあり、

map.keys() //keyを列挙するイテレータを取得
map.values() //valueを列挙するイテレータを取得

などが該当する。

ちなみに、for文で処理することも可能。

for (const [key, value] of map) {
  //keyとvalueを使った処理
}

ObjectとMapの相互変換

以下のようにして相互に変換できる。

//Map→Object
const obj = Object.fromEntries(map.entries())
//Object→Map
const map = new Map(Object.entries(obj))

//ちなみにMap→Arrayは
const array = [...map]
//Array→Map
const map = new Map(array)

Object.entries/Object.fromEntriesというドンピシャな関数が用意されているので、有り難く使わせてもらおう。

余談

そのうちmap.map((val, key)=>…)なんて登場するんじゃないかと思っていたが、どうも[...map].map(([key, val])=>…)で済むらしい。

参考文献

MDN Map - ObjectとMapの比較
MDN Map.prototype.forEach()

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?