0
0

More than 3 years have passed since last update.

TypeScriptでmapNotNull関数を実現したい

Last updated at Posted at 2020-06-08

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的なものはないのでしょうか。。

0
0
2

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