なんかよくやるのに、良く忘れるのでメモしておく

2つの配列を比較し一致したものを取り出したい。

特に難しいことはないのでまるっとコードを記載する。

const a:string[] =['a', 'b', 'c', 'd']
const b:string[] =['d', 'e', 'f', 'g']

// 期待値
// const c = string[] = ['d']

const c = a.filter(a =>b.includes(a))
console.log(c)

これでcは期待値になる。

どっちをFilterするのか

さて、いつもよくわからなくなるのは、どっちを回すべきなのかということ。

例えば今回は両者ともにLengthが4つだからいいけれど、例えば5と10だとどうなるのか。

実際にやってみる

const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx']

const c = a.filter(a => b.includes(a))
console.log(c)

const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx']

const c = b.filter(b => a.includes(b))
console.log(c)

で試してみたところ、結果は同じになった。

それぞれ、

1つ目のコードではaの要素のうち、配列bにも含まれている要素を取り出した。

2つ目のコードではbの要素のうち、配列aにも含まれている要素を取り出した。

どちらの方法を選択しても結果は変わらないが、コードの意図を明確にするために、xの要素のうち、配列xxにも含まれている要素を取り出したというのをコードで表現する必要がある。