JavaScript/Array

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動
Global JavaScript
Array
BigInt
JavaScript > 標準ライブラリ Array

Arrayオブジェクト[編集]

Arrayオブジェクトは配列を扱うための機能を組み込んだオブジェクトである。 配列を作成する際には

const arr = new Array( 'a', 'b', 'c', 'd' );

等の書式で行うが、実際にはシンタックスシュガーが存在しており、次の書式が等価である。

const arr = ['a', 'b', 'c', 'd'];

JavaScriptの配列は非常に柔軟であるため、データ型に関して制約がない。 そのため

const arr2 = [1,2,3,'4', true, [3,4,5]];

等の様に、複数のデータ型を同時に入れる事ができる。

プロパティ[編集]

Array.prototype.length[編集]

配列の有効な最大インデックス+1 を取得する。

静的メソッド[編集]

Array.from()[編集]

Array-likeまたはIterableなオブジェクトから新しい Array インスタンスを生成する。

Array.isArray()[編集]

配列であれば true を、配列でなければ false を返す。

Array.of(element0 [ , element1 [ , ... ] ] ] )[編集]

可変個の引数から、新しい Array インスタンスを生成する。 コンストラクタと似た働きをしますが、コンストラクタに1つの整数を渡すとその数だけ empty が詰まった配列を返すが、Arrray.ofメソッドはその数1つを要素とする配列を返す。

インスタンスメソッド[編集]

Array.prototype.toString()[編集]

配列を文字列化する。

Array.prototype.toLocaleString()[編集]

配列を、使用している環境の言語や文化に合わせた読みやすい形式の文字列に変換して返す。 変換は、配列内部の要素を再帰的に文字列化し連結するので、要素のtoLocaleString()での変換結果に留意する必要がある。

Array.prototype.concat( [ item1 [ , item2 [ , ... ] ] ] )[編集]

配列の連結を行い新しい Array インスタンスを生成する

Array.prototype.join(separator)[編集]

配列を指定した文字を連結子として連結して文字列として返す。

const d = [ 2007, 11, 21 ];
document.write( d.join("-") );	// 2007-11-21 と表示する。

Array.prototype.pop()[編集]

配列末尾から要素を取り除く。 このメソッドは破壊的メソッドなので、再代入の必要はない。 返り値としては、取り除かれた末尾の要素が返る。

const arr = ['a','b','c','d','e','f','g','h','i','j','k'];
arr.pop():	// 「k」が返る
document.write(arr);	// 「k」を取り除いたa,b,c,d,e,f,g,h,i,jが返る 
([]).pop();  // 配列の中身が空の場合はnullが返る

Array.prototype.push( [ item1 [ , item2 [ , ... ] ] ] )[編集]

配列の末尾に要素を追加して、その配列の長さを返す。このメソッドは破壊的メソッドなので再代入の必要はない。

const arr = [1,2,3,4,5,6,7,8,9,10];
arr.push(11);
document.write( arr );

Array.prototype.reverse()[編集]

配列の要素の順番を入れ替える。これは破壊的メソッドであるため。再代入の必要はない。

const arr = [1,2,3,4,5,6,7,8,9,10];
arr.reverse();	// [10,9,8,7,6,5,4,3,2,1,0] になる。

Array.prototype.shift()[編集]

配列の最初の要素を取り除く。このメソッドは破壊的メソッドのため再代入の必要はない。 返り値として取り除いた要素を返す。

const arr = [1,2,3,4,5,6,7,8,9,10];
arr.shift();
document.write( arr );

Array.prototype.slice(start, end)[編集]

startからend番目の配列要素を取得する。 引数に負の数を指定すると、配列の末尾からのインデックスでデータの取得を行える。

const arr = ['a','b','c','d','e','f','g','h','i','j','k'];
document.write( arr.slice( 3, 8 ) + "<br />" );	// d,e,f,g,h返す
document.write( arr.slice( -5, -1 ) + "<br />" );	// g,h,i,jを返す

end側にundefinedを指定すればstartから配列の末尾までを取得できるはずだが、現在の段階では実装に依存する。

document.write( arr.slice( 3, undefined ) + "<br />" );	// 配列の4番目から最後までを返す
document.write( arr.slice( 3 ) + "<br />" );	// d,e,f,g,h,i,j,k が返る正しき標準仕様外

Array.prototype.sort(comparefn)[編集]

配列要素を引数で指定した方法でソート(並べ替え)する。ちなみにこのメソッドは破壊的メソッドである。 並べ替えの方法は、引数の中で規則を定めた関数として与える。

説明だけでは分かりにくい、実例を挙げる。 例えばバラバラに並んだ数字を、昇順(ascending order)に並べ替えたいとき等には次の様な関数を作成して、引数として指定する。

function  ascendingOrder( _n1 , _n2 ){
	return _n1 - _n2;
}
const arr = [5,8,7,2,4,3,9,1,6,0];
arr.sort(ascendingOrder);	// ここで並べ替えを実行する
document.write(arr+"<br/>");	// 0,1,2,3,4,5,6,7,8,9が表示される

作成する関数は、配列要素から、2つずつ値を受け取ってそれを比較することにより、正、ゼロ、負のいずれかの値を返す。

並べ替えの規則を指定する場合、関数は非常に簡潔で短いものが非常に多いので、実際には次の様にアロー関数を比較に用いることが多い。

arr.sort((a, b) => a - b);	// ここで並べ替えを実行する

Array.prototype.splice(start, deleteCount [ , item1 [ , item2 [ , ... ] ] ] )[編集]

このメソッドは、分割(split)と切り取り(slice)の似た機能を兼ね合わせても足せたメソッドである。 また、このメソッドは破壊的メソッドである。また、返り値として取り除いた値を返す。

文のみの説明では分かりにくい所があるので、サンプルコードを提示する。 配列からn番目の要素を取り除きたい場合には次の様なコードを記述する。

const arr = ['a','b','c','d','e','f','g','h','i','j','k'];
const n=3;
arr.splice( n, 1 );	// インデックスが3の「d」を取り除く
document.write( arr + "<br />" );	// 「d」が無いa,b,c,e,f,g,h,i,j,kが返る

spliceメソッドの第2引数は取り除く範囲の大きさである。そのため例えば第2引数に4を指定すると、配列の4番目から8番目の要素が取り除かれる。

第3引数以降を利用すると、配列要素の取り除きではなく、置き換えができるようになっている。 つまり、第1、第2引数で配列の入れ替え箇所と範囲を指定した後に、そこに入れ替えたい要素を第3引数以降で指定する。

const arr = ['a','b','c','d','e','f','g','h','i','j','k'];
arr.splice( 3, 4, 'x','y','z' );	// インデックスが3~7の間の、つまりd,e,f,gをx,y,zに置き換える
document.write( arr + "<br />" );	// a,b,c,x,y,z,h,i,j,k が表示される。

Array.prototype.unshift( [ item1 [ , item2 [ , ... ] ] ] )[編集]

配列の先頭にアイテムを追加して、その配列の長さを返す。 このメソッドは破壊的メソッドなので、再代入の必要はない。

const arr = ['a','b','c','d','e','f','g','h','i','j','k'];
arr.unshift('z','y','x');	// 配列の最初にz,x,yを追加
document.write( arr );	// z,y,x,a,b,c,d,e,f,g,h,i,j,k が返る