JS/ES – 配列~Array

配列の定義

リテラル

配列のリテラルは他の言語と似ていて、[]の中に要素を','で区切って並べる。

空の配列も定義可能。

Arrayコンストラクター

Arrayクラスのコンストラクターで空の配列を作成可能。

要素の参照・追加

配列の要素の参照は他の言語と同じ。もちろん値の更新もできる。

新たに要素を追加するには、インデックスと値を指定。もちろん値の更新も可能。

配列の要素は、すべて同じ型でなくてもよい。

要素番号を飛ばして値を追加すると、その間は'empty'になる。

配列の長さ

配列の長さ(要素数)はlengthプロパティーで得られる。

先頭・末尾要素の取出し・追加・削除

配列の先頭要素・末尾要素について、追加や削除・取出しのメソッドが準備されていて、配列をキューやスタックのように使うことができる。詳細は配列の先頭・末尾要素の追加・削除にまとめている。

  • push~末尾追加
  • pop~末尾取出し・削除
  • unshift~先頭追加
  • shift~先頭取出し・削除

要素の取出し・削除・置換

splice~インデックス指定で取出し・削除・置換

splice()メソッドは指定したインデックスから指定した数の要素を削除する。追加する要素を指定した場合は指定した位置に要素が追加される。

filter~指定した内容の要素の取出し・削除

条件に一致する要素のみ取り出す場合、filter()メソッドを使う。filter()メソッドは非破壊的で新たな配列を生成する。

要素の内容を指定して削除する場合もfilter()で。

map~配列の要素の加工

map()メソッドは配列の各要素やインデックスなどの処理結果を要素とする配列を返す。

値とインデックスの順次取り出し

for文で値を取り出す

最も基本的なfor文の使い方で、インデックスを0~配列長−1まで変化させて直接参照する方法。

for...ofで値を直接取り出す

ES6のfor...of構文は、配列から要素を順次取り出してくれる(Pythonのfor...inと同じ動作)。

for...inでインデックスを取り出す

ES6のfor...inは配列からインデックスを順次取り出してくれる。ただし戻り値はStringなので要注意

entries()でインデックスと値を同時に取り出す

Array.prototype.entries()はインデックスと値の配列をイテレーションで返してくれる。

map()に値とインデックスの2つの引数を指定する

Array.prototype.map()は引数で指定したコールバック関数を各要素に適用した結果を配列として返す。通常は引数を1つ指定して配列の要素を得て、それに対して処理する。

map()は2つ目の引数を指定することができて、その場合2つ目の引数にはインデックスの値が入る。しかも、for…inと違ってインデックスは数値として得られる。

reducer~配列要素に対するイテレーション

samやmax/minメソッドはない

JSには多言語のように配列要素の合計や最大値を求める汎用の関数やメソッドが準備されていない。

その実装は、プログラムごとにArray.reduce()メソッドで行われているようだ。たとえば要素の合計を求める例を以下に示す。

配列の複製

const array_clone = [].concat(array)

const array_clone = array.slice(0, array.length)

const array_clone = [...array]

const array_clone = Array.from(array)

const array_clone = array.map(x => x)

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です