配列を扱っていると、配列の各要素に対してコードを実行したいことがあります。これを、配列の繰り返し(ループ)と呼びます。
ここでは、その過程で配列を変更したくない場合を見ていきます。配列を変換したい場合は、代わりに配列の変換の概念を参照してください。
forループ配列を繰り返し処理する最も基本的な方法は、forループを使うことです。詳しくは、forループの概念を参照してください。
const numbers = [6.0221515, 10, 23];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
// => 6.0221515
// => 10
// => 23
for...ofループ各繰り返しで値そのものを直接扱いたいときや、インデックスがまったく必要ないときは、for...ofループを使えます。
for...ofは、上に示した基本的なforループと同じように動きますが、ループ内で変数として_インデックス_を扱う代わりに、_値_を直接受け取ります。
const numbers = [6.0221515, 10, 23];
// Because re-assigning number inside the loop will be very
// confusing, disallowing that via const is preferable.
for (const number of numbers) {
console.log(number);
}
// => 6.0221515
// => 10
// => 23
通常のforループと同じように、continueを使うと現在の繰り返しを止められ、breakを使うとループの実行を完全に止められます。
forEachメソッドすべての配列には、配列の要素を繰り返し処理するために使えるforEachメソッドがあります。
forEachは、入力としてコールバックを受け取ります。コールバック関数は、配列の各要素に対して一度ずつ呼び出されます。コールバックには、現在の要素、そのインデックス、配列全体が引数として渡されます。多くの場合、使うのは現在の要素かインデックスだけです。
const numbers = [6.0221515, 10, 23];
numbers.forEach((number, index) => console.log(number, index));
// => 6.0221515 0
// => 10 1
// => 23 2
forEachループが始まってしまうと、繰り返しを途中で止める方法はありません。この場面では、breakとcontinueという文は存在しません。
駆け出しのマジシャンであるElyseは、自分のデッキをさまざまな方法で分析する必要があります。 話を簡単にするため、彼女が使うのは1〜10の値のカードだけです。
Elyseは、自分のデッキに特定の種類のカードが何枚あるかを知りたいと考えています。
配列(Elyseのデッキ)と数えたいカードの種類という2つの仮引数を取る関数cardTypeCheckを書いてください。
この関数ではforEachを使い、指定した種類のカードがデッキに何枚あるかを返します。
const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1
別の手品のために、Elyseは自分のデッキに奇数または偶数のカードが何枚あるかを知る必要があります。
2つの仮引数を取る関数determineOddEvenCardsを実装してください。仮引数は、カードの配列(Elyseのデッキ)と真偽値で、trueは「偶数」、falseは「奇数」に相当します。
この関数は、デッキの中にある奇数または偶数のカードの枚数(どちらを数えるかは2つ目の仮引数の値によって決まります)という1つの数値を返します。
今回は練習として、関数の実装にfor...ofループを使ってみましょう。
determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2
determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。