配列内のオブジェクトでそれぞれ重複する値を持つものを除外したいと思ったので、やり方を備忘録として残します。
js
let arr = [{id: 1}, {id: 2}, {id: 1}, {id: 3}, {id: 2}]
// id=1, id=2 がダブってるので重複を削除して下記のようにしたい
arr = [{id: 1}, {id: 2}, {id: 3}]
こんな感じでやれます。
js
arr = arr.filter((elm, index, selfArr) => {
return index === selfArr.findIndex(s => {
return s.id === elm.id
})
})
findIndex と filter の説明
js
// callbackでtrueとなる "最初" のindex番号を返す
findIndex(callback(elm, index, selfArray))
// callbackでtrueとなる要素だけ(trueの要素全て)を返す
filter(callback(elm, index, selfArray))
// どちらもcallbackの使わない引数は省略化
短く書くとこうなります。
js
// 1行でも書ける
arr = arr.filter((elm, index, selfArr) => index === selfArr.findIndex(s => s.id === elm.id))
もっと良い案があればどなたか教えてください。