const found = [1, undefined, 2].find(x => !x)
// undefined
const not_found = [1, 2].find(x => !x)
// undefined
find はみつからないと undefined
みつかったのが undefined のときも undefined
見つかったか知りたい場合は配列にラップすればわかりやすい
const result1 = [1, undefined, 2].map(x => [x]).find(([x]) => !x)
// [undefined]
const result2 = [1, 2].map(x => [x]).find(([x]) => !x)
// undefined
map する手間と find で配列の中身を取り出す手間を省くために関数にすると
const find = (arr, cb) => {
const result = arr.map(x => [x]).find((x, i, a) => cb(x[0], i, a))
return {
found: !!result,
value: result && result[0]
}
}
find([1, undefined, 2], x => !x)
// {found: true, value: undefined}
find([1, 2], x => !x)
// {found: false, value: undefined}
作ったはいいけど よく考えたら findIndex でよかった
こっちのほうが index も取れるし 配列の要素のラップ版を作るコストもなし
const find2 = (arr, cb) => {
const index = arr.findIndex(cb)
return {
found: index >= 0,
value: arr[index],
index,
}
}
find2([1, undefined, 2], x => !x)
// {found: true, value: undefined, index: 1}
find2([1, 2], x => !x)
// {found: false, value: undefined, index: -1}