トラック
/
JavaScript
JavaScript
/
演習
/
Elyses Enchantments
Elyses Enchantments

Elyses Enchantments

学習演習

はじめに

JavaScriptでは、配列は長さが決まっていないリストのような構造で、プリミティブでもオブジェクトでも、型が混ざっていても、どんな値でも入れることができます。

配列を作るには、角括弧([])の間に要素を並べます。 配列から値を読み出すときは、識別子のあとに角括弧([])を付けてインデックスを指定します。 配列のインデックスは0から始まります。

たとえば:

const numbers = [1, 'two', 3, 'four'];
numbers[2];
// => 3

配列に入っている要素の数を取得するには、lengthプロパティを使います。

const numbers = [1, 'two', 3, 'four'];
numbers.length;
// => 4

配列の要素を変更するには、そのインデックスに値を代入します。

const numbers = [1, 'two', 3, 'four'];
numbers[0] = 'one';
numbers;
// => ['one', 'two', 3, 'four']

メソッド

すべてのArrayオブジェクトで使えるメソッドの中には、配列への追加や削除に使えるものがあります。 この演習に取り組むときに役立つものを、いくつか紹介します。

push

.push(value)を使うと、配列の末尾にvalueを_追加_できます。 このメソッドは、配列の新しい長さを返します。

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

pop

.pop()を使うと、配列から_最後_のvalueを_削除_できます。 このメソッドは、削除した値を返します。 この変更により、配列の長さは減ります。

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

shift

.shift()を使うと、配列から_最初_のvalueを_削除_できます。 このメソッドは、削除した値を返します。 この変更により、配列の長さは減ります。

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

unshift

.unshift(value)を使うと、配列の先頭にvalueを_追加_できます。 このメソッドは、配列の新しい長さを返します。

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

splice

.splice(index, 1)を使うと、特定のindexにあるvalueを配列から_削除_できます。 このメソッドは、削除された要素を返します。

const numbers = [1, 'two', 3, 'four'];
numbers.splice(2, 1, 'one'); // => [3]
numbers;
// => [1, 'two', 'one', 'four']
Advanced

これらのメソッドには、ここで説明した以上の機能があります:

  • pushとunshiftはどちらも、引数を増やすことで、複数の値を一度に追加できます。 ただし、この演習を完了するために必要な機能ではありません。
  • spliceは、2つ目の引数を増やすことで、複数の値を削除できます。 ただし、この演習を完了するために必要な機能ではありません。
  • spliceは、deleteCountのあとに引数を追加することで、複数の値を追加することもできます。 これは、値の置き換えや、配列の途中への値の挿入(たとえば0個の要素を削除する)に使えます。 ただし、この演習を完了するために必要な機能ではありません。

説明

マジシャンの卵であるElyseは、基本をいくつか練習する必要があります。Elyseには、思い通りに動かしたいカードの山があります。

少しでも簡単にするため、Elyseは1から10のカードしか使いません。そのため、カードの山は数値の配列で表すことができます。カードの位置は、配列のインデックスに対応します。つまり、位置0は最初のカード、位置1は2枚目のカードを指す、といった具合です。

Note

2つの関数を除くすべての関数は、カードの配列を更新してから、変更後の配列を返す必要があります。これは、関数をきれいにつなげられるようにする、Builderパターンとして知られる一般的なやり方です。

例外は2つあります。getItemは、指定された位置にあるカードを返す必要があります。checkSizeOfStackは、指定されたサイズが一致する場合にtrueを返す必要があります。

1. 山からカードを取り出す

カードを1枚選ぶには、指定された山のインデックスpositionにあるカードを返します。

const position = 2;
getItem([1, 2, 4, 1], position);
// => 4

2. 山の中のカードを交換する

ちょっとした手品で、インデックスpositionにあるカードを、渡された交換用のカードと入れ替えます。 調整後の山を返します。

const position = 2;
const replacementCard = 6;
setItem([1, 2, 4, 1], position, replacementCard);
// => [1, 2, 6, 1]

3. 山の一番上にカードを挿す

山の一番上に新しいカードを挿して、カードを出現させます。 調整後の山を返します。

const newCard = 8;
insertItemAtTop([5, 9, 7, 1], newCard);
// => [5, 9, 7, 1, 8]

4. 山からカードを取り除く

指定されたpositionにあるカードを山から取り除いて、カードを消します。 調整後の山を返します。

const position = 2;
removeItem([3, 2, 6, 4, 8], position);
// => [3, 2, 4, 8]

5. 山の一番上のカードを取り除く

山の一番上にあるカードを取り除いて、カードを消します。 調整後の山を返します。

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

6. 山の一番下にカードを挿す

山の一番下に新しいカードを挿して、カードを出現させます。 調整後の山を返します。

const newCard = 8;
insertItemAtBottom([5, 9, 7, 1], newCard);
// => [8, 5, 9, 7, 1]

7. 山の一番下からカードを取り除く

山の一番下にあるカードを取り除いて、カードを消します。 調整後の山を返します。

removeItemAtBottom([8, 5, 9, 7, 1]);
// => [5, 9, 7, 1]

8. 山のサイズを確認する

山のサイズがstackSizeと等しいかどうかを確認します。

const stackSize = 4;
checkSizeOfStack([3, 2, 6, 4, 8], stackSize);
// => false
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
JavaScript Exercism

Elyses Enchantmentsを始める準備はできましたか?

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