LoginSignup
2
2

More than 5 years have passed since last update.

Mapを使ってオブジェクトの配列の重複を除外する。【Javascript】

Last updated at Posted at 2018-07-20

背景

バイト中に、mongodbからとってきたオブジェクトの配列から、valueが重複しているものを除きたいという場面がありました。僕がmapとfilterでゴリゴリやっていたのを見たCTOが「(少なくともこのシーンでは)こっちの方がいいっすね」というふうにいってMapを使ってやる方法を教えてくれたのでメモ書き程度に書いています。

僕の書いたやつ

interface Item {
  id: number
}

const data: Item[] = [
  { id: 1 },
  { id: 2 },
  { id: 1 }
]

const newData = data.filter((item, index, self) => (
  index === self.findIndex(i => (
    i._id === item._id
  ))
))

多分割と無難なんじゃないかなと思います。

教えてもらった実装

interface Item {
  id: number
}

const data: Item[] = [
  { id: 1 },
  { id: 2 },
  { id: 1 }
]

const uniqueItems = data.reduce((map, item) => {
  if (!map.has(item.id)) {
    map.set(item.id, item)
  }
  return map
}, new Map<number, Item>())

const newData = Array.from(uniqueItems.values())

感想

僕は、「ある配列をもとになんらかの配列を生成する」という処理を考えるときに、どうしてもmapやfilterのみで考えてしまう傾向があるみたいなので、適宜他の方法も考えられるようにならないといけないなぁという感じですね。もちろん、mapやfilterなどの方が適している場合もあるので、そのへんうまく使い分けられるようになれたらいいっすね。

2
2
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
2
2