JavaScript の配列の作成

ここでは JavaScript の配列 (Array) を作成する方法を説明します。

コンストラクタによる Array オブジェクトの作成

JavaScript で配列、すなわち、Array オブジェクトを作るには次のように Array() コンストラクタを呼ぶことで作成します。

var a1 = Array();
var a2 = Array(111, 222, 1000);

Array()new Array() は同じことです。

この例のように、コンストラクタに要素の値を渡すことで、作成とデータの初期化を同時にできます。

ただし、引数 arg をひとつだけ渡した時は、空の要素をもつ長さ arg の配列が作成されます。 例えば、Array(3) は空の値 (empty) を三つ持つ配列が作成されます。

この点については Array.of() にも補足説明があります。

配列の作成は、[] を使って記述できます。

var a1 = [];
var a2 = [111, 222, 1000];

配列内のそれぞれの要素にはゼロベースのインデックスが割り当てられます。 つまり、1番目の要素はインデックス 0、2番目の要素はインデックス 1、となります。

ひとつの配列内の要素は、同じ型の要素である必要はありません。次の例のように、number、string、Function オブジェクトなどと、別々の型でも構いません。

function foo(s) {
	//...
}

var a3 = [1, 'Hello', foo];
for (var i=0; i<a3.length; i++) {
    console.log(typeof a3[i]);
}

この結果はコンソールに、次のように出力されます。

number
string
function

Array.of() Array オブジェクトを作成

Array.of(...items) を使うと、引数 ...items で渡した値を要素としてもつ配列を作成します。

普通のコンストラクタ Array() を使う場合と Array.of() を使う場合では、特にひとつの値を渡した時に違いがあります

Array(5) とすると空の要素が 5 つある配列が作成されます。一方、Array.of(5) とすると 5 という値をもつ要素をひとつもつ配列 [5] が作成されます。

let a, b;
a = Array.of(5);
console.log(a); // [5]
a = Array.of(1, 2, 3);
console.log(a); // [1, 2, 3]

b = Array(5); // [empty x 5]
console.log(b);
b = Array(1, 2, 3);
console.log(b); // [1, 2, 3]

Array.from() でコレクションから Array オブジェクトを作成

Array.from() を使うと、HTMLCollection などのイテラブル (iterable) から Array オブジェクトを作成することができます。

リストなどのコレクションは、複数の要素を保持している点では配列に似ているのですが、オブジェクトのタイプとしては別物なので注意が必要です。

例えば、DOM の HTML 要素は children属性を持っています。このタイプは Array ではなく HTMLCollection です。このため、Array の関数である forEach() などを適用しようとすると、forEach is not a function というエラーが発生します。

コレクションを Array として扱うには、Array.from() 関数で Array オブジェクトを作成します。

let c = document.getElementById("ul1").children;
let a = Array.from(c);
a.forEach(e => {
    console.log(e);
});

DOM 要素の .children は HTML コレクションを返し、.childNodes はノードリスト (NodeList) を返します。ノードリストは HTML 要素以外の #text などの文字列ノードも含みます。

flat() 入れ子の配列をフラットにして新しい配列を作る

flat( depth ) 関数を使うと、配列の要素に配列を持つ場合に、 子の配列の要素を展開して元の配列に結合します。

この操作を引数 depth で指定した深さ分だけ、繰り返します。depth を省略した場合は 1 とみなされます。

次の例では、深さを 1 と 2 にして違いをみています。

let a = [1, 2, 3, [10, 11, ['A', 'B']], 4, [5, 6]];
console.log(a);

let b = a.flat(1);
console.log(b);
// [1, 2, 3, 10, 11, ['A', 'B'], 4, 5, 6]

let c = a.flat(2);
console.log(c);
// [1, 2, 3, 10, 11, 'A', 'B', 4, 5, 6]

また、flat() を使うと、配列内の空のスロット (empty) が削除されます。

let a = [1, 2, , 3];
let b = a.flat();
console.log(b); // [1, 2, 3]

フラットにする入れ子の深さに制限が不要な場合、depth として Infinity を指定できます。

let a = [1, 2, , [10, ['A', 'B', ['x', 'y']]]];
console.log(a);

let b = a.flat(Infinity);
console.log(b);
// [1, 2, 10, "A", "B", "x", "y"]

split() 文字列から配列を作成

文字列 (String) の操作関数である split() を使うことで、 Array オブジェクトを作成することができます。

split() を用いると、 例えば Hello,world! という文字列から、, を区切り文字として、 文字列を分割して ['Hello', 'world!'] という内容の配列オブジェクトを作成する、ということができます。

詳しくは「split() の使い方」をみてください。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 JavaScript 入門