Arrayクラスのクラスメソッド

《 初回公開:2023/10/19 , 最終更新:未 》

【 目次 】

Array.isArray

Array.isArray メソッドは、与えられた値が配列かどうかを判定するための静的メソッド

構文
Array.isArray(value)
引数
value
判定対象の値を指定。
戻り値
引数valueがArrayクラスのインスタンスかどうかを示す論理値。
配列ならtrue,配列でないならfalseを返す

console.log(Array.isArray(['a', 'b', 'c']));    // true
console.log(Array.isArray("abc"));  // false

// TypedArrayすなわち型付き配列にはfalseを返す
console.log(Array.isArray(new Uint8Array(32))); // false

// Arrayを継承したクラスのインスタンスに対してはtrueを返す
class ArrayEx extends Array { };
console.log(Array.isArray(new ArrayEx()));  // true

// 意外な事にArray.prototype は配列
console.log(Array.isArray(Object.prototype));   // false
console.log(Array.isArray(Array.prototype));    // true

クラスの判定については「型(クラス)の判定 - 愚鈍人」で述べているが、Arrayクラスの場合は専用のメソッドが用意されていて、
Array.isArray メソッドは、instanceof キーワードを使用するよりも堅牢な方法で配列かどうかを判定することができる。

Array.of

Array.ofメソッドは、与えられた引数を要素とする新しい配列を作成する。
このメソッドについては配列の生成で既に解説済み。

Array.from

反復可能なオブジェクトまたはArray-likesオブジェクト(文字列、Set、Mapなど)から、浅くコピーされた新しい配列を生成する。

構文
Array.from(iterable[, mapFunction[, thisArg]])
引数
iterable
配列に変換するイテラブルオブジェクトまたはArray-likesオブジェクト。
mapFunction
各要素に対して適用する変換関数。
この関数は要素ごとに呼ばれ、変換された値を含む新しい配列が生成される。
mapFunctionは以下の引数を持つ。
element
現在処理中の要素の値。
index(省略可能)
現在処理中の要素のインデックス。
thisArg (省略可能)
mapFunction関数内で this として参照する値を指定。

配列や型付き配列は反復可能なオブジェクトでありArray-likesオブジェクトとも言えるので、Array.fromの引数になりうる。

反復可能オブジェクトや「array-like object」そして型付き配列は配列でサポートされているすべてのメソッドがサポートされているわけでは無い。
いっそ、Array.fromメソッドによって配列に変換してしまえば配列のメソッドがすべて使えるようになって便利である。

次のコードは「array-like object」をいったんArray.fromメソッドを使って配列に変換した後、配列のforEachを利用する例。
配列に変換した後は配列のすべてのメソッドが利用可能。

const arrayLike = {
    0: "a",
    1: "b",
    length: 2,
};
const array = Array.from(arrayLike)

array.forEach(element => console.log(element));
// a
// b

Array.fromメソッドは配列を返すのでメソッドチェインが可能。

Array.from(arrayLike).forEach(element => console.log(element));

また、Array.fromメソッドの第二引数には マッピング関数も指定できるので、もっと簡略化して。

Array.from(arrayLike, element => console.log(element));

反復可能なオブジェクトの場合は

let myIterable = {
    *[Symbol.iterator](){
        yield "a";
        yield "b";
    }
}
Array.from(myIterable, element => console.log(element));
// a
// b

Array.from(iterable, mapFunction, thisArg) は Array.from(iterable).map(mapFunction, thisArg) と同じ結果。
マッピング関数を使って反復可能なオブジェクトの要素を2倍した値をマッピング。

let myIterable = {
    *[Symbol.iterator]() {
        yield 1;
        yield 3;
        yield 5;
    }
}
let array = Array.from(myIterable, element => element * 2);
console.log(array); //  [2, 6, 10]

型付き配列をArray.fromメソッドを使って配列に変換する例も。

// 型付き配列を定義して値を代入
const int16Array = new Int16Array(3);
for(let i=0;i<int16Array.length;i++){
    int16Array[i]=i+4;
}
// 配列に変換した後、要素の値をコンソール出力
Array.from(int16Array).forEach(element => console.log(element));

配列も反復可能なオブジェクトなのでArray.fromメソッドの引数に配列を指定する事で配列のシャローコピーをおこなう事ができる。

const array = ["a", "b", "c"];
let copy_array = Array.from(array);
ページのトップへ戻る