WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/API/Array の変更点

#author("2026-08-31T22:10:04+09:00","default:guide","guide")
* Pkript/API/Array [#g6e9bb79]
#author("2026-09-04T00:05:54+09:00","default:mcp","bot-mcp")
* Pkript/API/Array [#oe061166]

配列型のメソッドリファレンス。

** リファレンス [#i6a98ff8]
** リファレンス [#a275cbef]

*** プロパティ [#qab083d8]
*** プロパティ [#c91603f0]

- length: Number: 要素数
- arr.length: Number: 要素数

*** 追加・削除 [#f2dd551f]
*** 追加と削除 [#ee261a5c]

|~メソッド|~戻り値|~説明|h
|arr.push(val)|Number: 追加後の length|末尾に追加(破壊的)|
|arr.pop()|any|末尾の要素を取り出す(破壊的)|
|arr.shift()|any|先頭の要素を取り出す(破壊的)|
|arr.unshift(val)|Number: 追加後の length|先頭に追加(破壊的)|

*** 検索 [#x16dcec9]
*** 検索 [#p3ce2f14]

|~メソッド|~戻り値|~説明|h
|arr.indexOf(val)|Number(見つからない場合 -1)|最初の一致位置|
|arr.lastIndexOf(val)|Number(見つからない場合 -1)|後方から最初の一致位置|
|arr.includes(val)|Boolean|要素が存在するか|
|arr.at(index)|any(範囲外は null)|指定位置の要素。-1 は最後の要素|
|arr.find(fn)|any(見つからない場合 null)|条件に合う最初の要素|
|arr.findIndex(fn)|Number(見つからない場合 -1)|条件に合う最初のインデックス|
|arr.findLast(fn)|any(見つからない場合 null)|条件に合う最後の要素|
|arr.findLastIndex(fn)|Number(見つからない場合 -1)|条件に合う最後のインデックス|

*** 変換・生成 [#nd247357]
*** 変換と生成 [#ra7fd97c]

|~メソッド|~戻り値|~説明|h
|arr.slice(start, [end])|Array|部分配列(非破壊)|
|arr.concat(other)|Array|連結した新しい配列|
|arr.reverse()|Array|順序を反転(破壊的)|
|arr.sort([compareFn])|Array|並べ替え(破壊的)|
|arr.fill(val, [start], [end])|Array|範囲を val で埋める(破壊的)|
|arr.splice(start, [count], ...items)|Array: 取り除いた要素|削除と挿入(破壊的)|
|arr.flat([depth])|Array|入れ子の配列を平坦化(省略時は1段)|
|arr.join(sep)|String|sep で連結した文字列|
|arr.toString()|String|arr.join(",") と同じ|

*** コールバック系 [#m4b7357d]
- splice は count を省略すると start から末尾まで削除する。start が負なら末尾からの位置
- flat の depth に Infinity を渡すと最後まで平坦化する。自分自身を含む配列はそこで止まる

*** コールバック系 [#a33a2671]

コールバックのシグネチャ: fn(item, index, array)(reduce のみ fn(acc, item, index, array))

|~メソッド|~戻り値|~説明|h
|arr.map(fn)|Array|各要素を変換した新しい配列|
|arr.flatMap(fn)|Array|変換してから1段平坦化した新しい配列|
|arr.filter(fn)|Array|条件に合う要素の新しい配列|
|arr.forEach(fn)|なし|全要素にコールバックを適用|
|arr.some(fn)|Boolean|1つでも条件に合えば true|
|arr.every(fn)|Boolean|すべて条件に合えば true|
|arr.reduce(fn, [initial])|any|1つの値に畳み込む|
|arr.reduceRight(fn, [initial])|any|末尾から畳み込む|

- 走査は配列のコピーに対して行われる。コールバック内で元の配列を変更してもループ回数は変わらない
- some は最初に true になった時点で、every は最初に false になった時点で打ち切る
- 空配列に対して some は false、every は true(JavaScriptと同仕様)
- reduce は初期値を省略すると先頭要素が初期値になる。空配列で初期値を省略するとエラー
- reduce は初期値を省略すると先頭要素が初期値になり、走査は2番目から始まる。空配列で初期値を省略するとエラー


** 使用法 [#qf719f90]
** 使用法 [#ea0d88fd]

*** リストをHTMLに変換する [#oc5c22a4]
*** リストをHTMLに変換する [#array_usage_map]

#pkript(highlight){{
#highlight{{
const items = ["りんご", "みかん", "ぶどう"];
const html = items.map((s) => "<li>" + htmlsc(s) + "</li>").join("");
return "<ul>" + html + "</ul>";
}}

*** 条件で絞り込んでから変換する [#jda440cd]
*** 条件で絞り込んでから変換する [#array_usage_filter]

#pkript(highlight){{
#highlight{{
const rows = data.get("entries", []);
const active = rows.filter((r) => r.active).map((r) => r.name);
return active.join(", ");
}}

*** 合計を求める [#lb67fa6a]
*** 合計を求める [#array_reduce]

#pkript(highlight){{
#highlight{{
const total = [10, 20, 30].reduce((a, b) => a + b, 0);   // 60
}}

*** 更新日時の新しい順にソートする [#c7927be3]
*** 更新日時の新しい順にソートする [#array_usage_sort]

#pkript(highlight){{
#highlight{{
const pages = wiki.pages("Blog/");
const sorted = pages.slice().sort((a, b) => wiki.time(b) - wiki.time(a));
return sorted.map((p) => "<li>" + wiki.link(p) + "</li>").join("");
}}