TypeScriptでmapNotNull関数を実現したい
kotlinのmapNotNull関数をTypeScriptでも実現したい、そういう記事です。
mapNotNull()
KotlinのmapNotNull関数
Kotlinのmap関数は、コレクションの各要素に与えられた関数を適用して、その結果を新しいコレクションに集約します。mapNotNull関数は結果がnullの場合は、その要素はスキップします。
val list = listOf(
listOf(79, 80, 75, 87),
listOf(60, 55, 45, 63),
listOf(69, 90, 74, 88)
)
println(
list.mapNotNull { if (it >= 80) it else null }.filter { it.isNotEmpty() }
) // [[80, 87], [90, 88]
TypeScriptで同じことを実現しようとすると・・・
let list = [
[79, 80, 75, 87],
[60, 55, 45, 63],
[69, 90, 74, 88]
]
console.log(
list.map(p => p.filter(q => q >= 80))
) // [[80, 87], [], [90, 88]]
空配列が混じってしまいます。
やはりさらにfilterで空配列を取り除くしかないのか
let list = [
[79, 80, 75, 87],
[60, 55, 45, 63],
[69, 90, 74, 88]
]
console.log(
list.map(p => p.filter(q => q >= 80))
.filter(r => r.length != 0)
) // [[80, 87], [90, 88]]
追記
コメントで指摘していただいた通り、Kotlinでもfilterで空配列を除去しないとだめでした。
mapNotNullOrEmpty的なものはないのでしょうか。。