メインコンテンツまでスキップ

inazuma code :繰り返し処理

for は配列・オブジェクト・レンジ(範囲)を順に走査し、各要素に対して処理を行った結果を配列として返します。

if と同様に「文」ではなく「式」なので、評価結果をそのまま変数に代入したり、メソッドチェインに渡せます。

基本構文(配列)

let result = for (let value in values) {
// 各要素ごとの処理
value * 2;
};
  • values は配列・オブジェクト・レンジ(範囲)です。
  • ブロック { ... } 内で 最後に評価された式の結果 が、その要素に対する返り値になります。
  • 全要素の返り値が配列として返されます。

値とインデックス

(index, value) の形で宣言すると、インデックスと値の両方を参照できます。

let result = for (let (index, value) in values) {
`${index}: ${value}`;
};

オブジェクトの走査

オブジェクトを走査する場合も (key, value) の形で宣言します。

let user = { name: "Alice", age: 18 };

let result = for (let (key, value) in user) {
key + ": " + value;
};
// ["name: Alice", "age: 18"]

レンジ(範囲)

A..B の形で数値の連続範囲を生成できます。

// 昇順
for (let i in 1..5) {
i * 2;
}; // [2, 4, 6, 8]

// 降順
for (let i in 5..1) {
i * 2;
}; // [10, 8, 6, 4]

ネスト

for 式は入れ子にできます。

let result = for (let i in 1..4) {
for (let j in 1..3) {
i + j;
}
};
// [[2, 3], [3, 4], [4, 5]]

メソッドチェイン

for 式の返り値は配列なので、そのままメソッドチェインが可能です。

let result = for (let i in 0..10) {
i->is_even() ? i : 0;
}->filter(x => x > 5);
// [6, 8]
まとめ
  • として評価されます。
  • 対象は配列・オブジェクト・レンジです。
  • 結果は配列・オブジェクトとして返ります。
  • ブロック内で 最後に評価された式の結果 がその要素の返り値です。
  • (index, value) / (key, value) のように複数変数で要素情報を取得できます。
  • ネストに対応しています。
  • 評価結果に対して、そのままメソッドチェインが可能です。