リストから特定値を取得: Notion Formula 解説 (14)

はじめに

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

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

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

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

リストを加工: concat, flat, reverse, sort, unique, filter, map

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

リスト

リストは Formula 2.0 から導入されました。数式で書く場合には [] を使って記述しますが、リレーションを参照することで、ブロックのリストを取得することもできます。後述する map メソッドを使って、任意のプロパティを取り出すことができるようになり、ロールアップのほとんどの部分を Formula だけで書くことができるようになりました。

数値のリストは以下のように記述されます。いくつかの関数は中身が数値である場合に統計処理をすることが可能です。

[1, 2, 3]

リストの中身は文字列や日付なども入れることが可能です。

["abc", "def", "ghi"]
[today(), now(), parseDate("2024/5/29")]

型を混ぜたリストも可能ですが、不便なのであまり使いません。今日は、このリストから値を指定して取り出すメソッドについて解説していきます。

at(pos)

「at(pos)」はリスト内の指定されたインデックスの値を返します。零または正の場合には左から数え、負の場合は右から数えます。-1 は一番最後の位置になります。なお、範囲外の場合には Empty になります。どの型でも同じルールになっています。

at (Number)
at (String)
at (Date)
at (Checkbox)

first()

「first()」はリスト内の最初の要素を返します。

first (Number)
first (String)
first (Date)
first (Checkbox)

last()

「last()」はリスト内の最初の要素を返します。

last (Number)
last (String)
last (Date)
last (Checkbox)

find(current == xxx)

「find(current == xxx)」は条件がtrueを返すリスト内の最初の要素を返します。current を使ってリスト内の要素を参照したり、index を使ってリスト内のインデックスを参照したりできます。current がブロックの場合には、そのプロパティなどを参照することもできます。以下の例では value プロパティの値と等しいものを検索しています。複数個存在する場合には、一番最初の要素が取得されています。

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

find (Number)
find (String)
find (Date)
find (Checkbox)

findIndex(current == xxx)

「findIndex(current == xxx)」は条件がtrueであるリスト内の最初の項目のインデックスを返します。current を使ってリスト内の要素を参照したり、index を使ってリスト内のインデックスを参照したりできるのは find と同じです。current がブロックの場合には、そのプロパティなどを参照することもできます。以下の例では value プロパティの値と等しいものを検索し、そのインデックスを返しています。複数個存在する場合には、一番最初の要素のインデックスが取得されています。

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

findIndex (Number)
findIndex (String)
findIndex (Date)
findIndex (Checkbox)

slice()

「slice(start, end)」は指定された開始インデックス(含む)から終了インデックス(省略可能、含まない)まで、入力リストのサブセットを返します。

prop("list").slice(start, end) /* start から end -1 まで */
prop("list").slice(start) /* start から最後まで */

slice (Number)
slice (String)
slice (Date)
slice (Checkbox)

おわりに

今回はリストに関するメソッドのうち、特定の値を取り出すメソッドを解説しました。明日以降もリストに関する記事を続けていきます。