リストを加工(その2): Notion Formula 解説 (18)

はじめに

Notion Formula の第14回目から4日間にわたって、Formula 2.0 から導入されたリストに対するメソッドを順次解説する予定でした。昨日、filter と map を残してしまったので、今日はそれを解説します。すでに逆引き Formula のページに関数説明があるので、このページを見ながら解説していきます。

特定値を取得: at, first, last, find, findIndex, slice

リストを調査: empty, length, contains, includes, every, some,

リストから計算: max, min, mean, sum, median

リストを加工(その1): concat, flat, reverse, sort, unique

リストを加工(その2): filter, map

リストから文字列(文字列の回で解説): join

filter()

「filter()」は条件がtrueであるリスト内の値を返します。条件は要素を current 、インデックスを index でそれぞれ取得し、それらに対する条件文を作成し、それが true の場合に値を残します。文法は以下のようになります。

prop("list1").filter(current または index に関する条件文)

以下の例では、current が value に等しいものを取り出しています。

prop("list").filter(current == prop("value"))

filter (Number list)
filter (String list)
filter (Date list)
filter (Checkbox list)

filter はリレーションと組み合わせ、その先のプロパティでフィルタリングするために用いられることが多いです。

filter (Relation)

map()

「map()」は入力リスト内のすべての項目に対して式を呼び出した結果が入力されたリストを返します。要素ごとの値が current に、要素のインデックスが index に渡されるので、それを使って値を変換します。文法は以下のようになります。

prop("list1").filter(current または index の値を使って作った式)

数値のリストに対して value の値を加算した新しいリストを返すには以下のように記述します。

prop("list").map(current + prop("value"))

map (Number list)

文字列も同様です。同じ式で文字列を連結してみました。

map (String list)

日付のリストでは、特定日との日付差分を計算してみました。

prop("list").map(current.dateBetween(prop("date"), "days"))

map (Date list)

チェックボックスでは value と一致しなかったら true にするという処理を書きました。すなわちチェックが入っていると、チェックボックスは反転し、チェックが入っていないと変換しません。

prop("list").map(current != prop("value"))

map (Checkbox list)

map もリレーションと組み合わせて使うことが多いです。リレーション先の数値を map することで数値のリストを取得できます。この結果を以前説明した sum() に渡すことで、サブアイテムの値を集計することができるようになります。

map (Relation)

おわりに

リストに関するメソッドはこれで終わりになります。filter, map はかなり使い道が多いです。これらは逆引き Formula でもかなり多く紹介されています。一通りメソッドの説明が終わったら、逆引き Formula の内容を一つずつ解説していく予定なので、その時にたくさん利用されることと思います。