javascript 第7章 配列

本にはjavascriptの配列には型がないらしくて、どんな値でも配列に格納できる。最大4,294,967,395個の要素を格納できる。javascriptの配列は動的で、縮んだり伸びたり自由自在。配列の中に配列を格納したりもできる。
配列は、Array.prototypeからプロパティを継承していて、使えるメソッドは配列だけでなく「配列のような」オブジェクトにも利用可能。

配列の生成には4つ方法あって

  1. 配列リテラルを使う

  2. 反復可能なオブジェクトに対するスプレッド演算子

  3. Array()コンストラクタ

  4. Array.of()ファクトリメソッドとArray.from()メソッド

反復可能なオブジェクトに対するスプレッド演算子
これは、ES6以降で使えるもので、配列リテラルの中に他の配列要素を展開できる。
Array.ofは配列を生成するものでArray()コンストラクタと似てるねんけど、Array()コンスラクタって数値を一つだけ持つような配列を生成できへんねんな。new Array(10)やと配列の長さを指定してる意味になってlength = 10の疎な配列ができてしまう。引数を2つ以上指定して初めて値の入った配列を作成できる。それを解消してるのが、Array.of()でlet a = new Array.of(10)とするとa = [10]の配列が生成される。
Array.fromは引数に「配列のような」オブジェクトを真の配列にしたりするときに使ったりする。「配列のような」オブジェクトにもArray.prototypeから継承されたメソッドを使うことはできるけど、めんどくさいらしい。知らんけど。Array.prototype.slice.callというふうに、最後にcallを入れないとあかんくなる。

配列の巡回には、for/ofループやforEach(), forループが使えるんやけど、forEach()は、疎の配列に対しては関数を実行しないんやけど、for/ofとかはその配列に対してundefinedを返す。
forEach()は途中で巡回を止めることはできないねんて。で、forEach()っていてレーターメソッドっていうカテゴリにはいってる。
他のいてレーターメソッドは以下。

  • map()

  • filter()

  • find()

  • findIndex()

  • every()

  • some()

  • reduce()

  • reduceRight()

ほかにもpushとかsliceとか配列をいじるメソッドはいっぱいあるけど割愛。

配列の検索をするときにはindexOf()とlastIndexOf()を使う。ES2016からはincludes()が使えるらしくて、これは値が配列中に含まれているかどうかだけを返し、インデックスについては返さない。indexOfとかはインデックスも返すからNaNを検索したときに、NaN === 配列中のNaNと認識してくれへん。NaNってNaN値を含めて全ての値と異なると判定するらい。やけど、includes()は文字面だけをみて等しいかを判断するからなんと、NaNと配列中のNaNを同じものとして認識する。(NaNだけに?)
話変わるけど、文字列は配列のように扱うことができるらしい。charAtメソッドや[ ]で文字ごとに読み出しすることができる。基本型であるStringは、不変なのでpushやreverseなどの配列メソッドは使われへんらしいわ。使ってもエラーにはならんねんけど、使われへんねんて。

この記事が気に入ったらサポートをしてみませんか?