トラック
/
JavaScript
JavaScript
/
演習
/
Elyseの分析魔法
Elyseの分析魔法

Elyseの分析魔法

学習演習

はじめに

アロー関数

関数宣言や関数式のほかにも、JavaScriptには関数を定義するための、とても簡潔な構文があります。 このような関数は、_アロー関数_と呼ばれます。

関数宣言とアロー関数を比べてみましょう。

function addUpTwoNumbers(num1, num2) {
  return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
  return num1 + num2;
};

上の例のように、関数の本体がreturn文だけの場合は、波括弧({})とreturnキーワードを省略できます。 入力が1つだけの場合は、括弧(())も省略できます。

const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;

アロー関数は、短いコールバック関数を関数呼び出しの中に直接定義するときによく使われます。

applyToSquare(number => number * number);

配列の分析

配列には、配列の中身を分析するための組み込みメソッドがあります。 これらのメソッドのほとんどは、trueまたはfalseを返す関数を入力として受け取ります。 このような関数は、predicateと呼ばれます。

これらの組み込みメソッドは、_forループや組み込みのforEachメソッドの代わりに_使うためのものです。

forループを使った分析の例:

const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] === 'two') {
    return i;
  }
}
// => 1

組み込みメソッドを使った分析の例:

const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1

配列を分析するときに役立つ、そのほかの組み込みメソッドを以下に紹介します。 配列のメソッドの一覧は、MDNを参照してください。

includes

includes(value)メソッドは、配列に特定の値が含まれているかどうかを判定します。 値が含まれていればtrueを、含まれていなければfalseを返します。

const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false

every

every(predicate)メソッドは、_述語_である関数を入力として受け取ります。 これは、配列のすべての要素を述語に渡したときにtrueを返すかどうかを調べます。 言い換えると、すべての要素が、このメソッドに渡したテストに通るかどうかを調べるということです。 すべての要素が述語のテストに合格したらtrueを、そうでなければfalseを返します。

const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true

some

some(predicate)メソッドはeveryメソッドと同じですが、配列の中の少なくとも1つの要素が_述語_のテストに合格したときにtrueを返します。

const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true

find

find(predicate)メソッドは、predicateのテストに合格した最初の要素の値を返します。 some()が合格したときにtrueを返すのに対し、find()は配列内の実際の値を返します。 配列のどの要素も_述語_のテストに合格しなかった場合、このメソッドはundefinedを返します。

const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1

findIndex

findIndex(predicate)はfind()メソッドと同じですが、_述語_のテストに合格した要素の(最初の)_インデックス_を、valueの代わりに返します。 配列のどの要素も_述語_のテストに合格しなかった場合、このメソッドは-1を返します。

const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1

説明

魔法使いの見習いであるElyseは、修行を続けています。彼女は手品を披露するために、いくつかのカードの山札を渡されます。 少し簡単にするため、彼女は1から10までのカードだけを使います。

この演習では、組み込みのメソッドを使って配列の中身を分析します。

1. カードの位置を調べる

Elyseは、山札の中にあるカードの位置(インデックス)を知りたいと思っています。

const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3

2. カードがあるかどうかを調べる

Elyseは、あるカードが山札にあるかどうかを調べたいと思っています。つまり、山札に特定のnumberが含まれているかどうかです。

const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true

3. すべてのカードが偶数かどうかを調べる

Elyseは、すべてのカードが偶数かどうかを知りたいと思っています。つまり、山札にあるそれぞれの数値が偶数のnumberかどうかです。

isEachCardEven([2, 4, 6, 7]);
// => false

4. 山札に奇数のカードがあるかどうかを調べる

Elyseは、山札に奇数の数値があるかどうかを知りたいと思っています。

doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true

5. 山札から最初の奇数のカードを取り出す

Elyseは、最初の奇数のカードの値を知りたいと思っています。

getFirstOddCard([4, 2, 8, 7, 9]);
// => 7

6. 最初の偶数のカードの位置を調べる

Elyseは、最初の偶数のカードの位置を知りたいと思っています。

getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
JavaScript Exercism

Elyseの分析魔法を始める準備はできましたか?

Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。