Index

HOME > プログラムTOP > JavaScript



配列の知識と技術(1)

 JavaScript の実用的な Tips です。ここでは、配列を扱う Array オブジェクトを扱います。実装済みの Array オブジェクトのコンストラクタ、プロパティ、メソッドのうち、主なものについて解説しています。
[INDEX] 配列の作成 :: コンストラクタ、lengthプロパティ
要素の追加と削除 :: unshiftメソッド, pushメソッド, shiftメソッド, popメソッド
連結と抽出 :: concatメソッド, joinメソッド, sliceメソッド
並べ替え :: sortメソッド, reverseメソッド
[ 配列の知識と技術(2) : 二次元配列 / 連想配列 / クイックソート ]

sasaraan programming

Exposition

■配列の作成

 配列を扱う Array オブジェクトには三つのコンストラクタが用意されています。通常は、new キーワードとコンストラクタを利用して Array オブジェクトを作成します。
var a = new Array();: 要素数 0 の Array オブジェクトを作成
var a = new Array(n); : 要素数 n の Array オブジェクトを作成
var a = new Array(e1, e2, ... , eN);: e1, e2 〜 eN を要素に持つ Array オブジェクトを作成
 各要素には、添え字(= インデックス)を利用してアクセスします。添え字は必ず 0 から始まります。また、記述の際は [] で囲む必要があります。
// JavaScript Source
var a = new Array(11, 22, 33, 44, 55, 66, 77, 88, 99);
var n = a[0];                // = 11
n = a[8];                     // = 99
a[8] = 0;                     // 要素の値を変更
n = a[8];                     // = 0
 要素数を取得したい時は、length メソッドを使用します。length メソッドは配列の要素数を返します。
length : 要素数の取得 (IE3/NN3)
// JavaScript Source
var a = new Array(11, 22, 33, 44, 55, 66, 77, 88, 99);
var n = a.length;                // = 9

■要素の追加と削除

 配列に要素を追加する時は、添え字を指定して値を代入します。既存のデータの値を変更する時も同様です。この時、添え字が配列の要素数をオーバーしても構いません。自動的に要素数が算出され確保されます。ただし、値が設定されていない要素は、未定義を表す "undefined" を返します。
// JavaScript Source
var a = new Array(5);        // 要素数 5 の配列
a[2] = 33;                        // 添え字 2 の要素に値を設定, a = (-, -, 33, -, -)
a[8] = 99;                        // 添え字 8 の要素に値を設定, a = (-, -, 33, -, -, -, -, -, 99)
var n = a[1];                     // 添え字 1 の要素の値を取得, n = undefined
 要素の追加・削除を行う便利なメソッドも用意されています。
unshift(e) : 要素eを先頭に追加(IE6/NN4)
push(e) : 要素eを末尾に追加(IE6/NN4)
shift() : 先頭の要素を取得して削除(IE6/NN4)
pop() : 末尾の要素を取得して削除(IE6/NN4)
// JavaScript Source
var a = new Array(22, 33, 44, 55, 66, 77, 88);
var n;
a.unshift(11);    // 要素を先頭に追加, a = (11, 22, 33, 44, 55, 66, 77, 88)
a.push(99);       // 要素を末尾に追加, a = (11, 22, 33, 44, 55, 66, 77, 88, 99)
n = a.shift();     // 先頭の要素を取得・削除, n = 11 / a = (22, 33, 44, 55, 66, 77, 88, 99)
n = a.pop();       // 末尾の要素を取得・削除, n = 99 / a = (22, 33, 44, 55, 66, 77, 88)

■連結と抽出

 配列同士は、concat メソッドを使うと簡単に連結させることができます。また、slice メソッドでは、配列の一部分を抽出することができます。この時、引数に指定する最後の要素(下記の引数 end)は含まれません。これらは、いずれも戻り値を取得して利用します。元の配列には変化がありませんので注意が必要です。
 また、join メソッドでは、各要素を指定した文字列で連結することができます。文字列を指定しない時は "," が使用されます。
concat(a1, a2, ... , aN) : 配列a1, a2 〜 aNを順に連結して取得(IE4/NN4)
join([s]) : 各要素を文字列s(省略時は",")で連結した文字列を取得(IE4/NN3)
slice(start, end) : 添え字 start〜end-1 の範囲の要素を抽出して取得(IE4/NN4)
// JavaScript Source
var a1 = new Array(11, 22, 33);
var a2 = new Array(44, 55, 66);
var a3 = new Array(77, 88, 99);
var ax = a1.concat(a2, a3);        // 配列の連結, ax = (11, 22, 33, 44, 55, 66, 77, 88, 99)
var az = ax.slice(1, 7);               // 配列の抽出, az = (22, 33, 44, 55, 66, 77)
var as = az.join(":");                 // 文字列として連結, as = "22:33:44:55:66:77"

■並べ替え

 並べ替えには sort メソッドを利用します。このメソッドを使用すると、要素が昇順にしたがって並べ替えられます。要素が数値であれば小さい順で、文字列であれば使用されている文字コードの順となります。ただし、引数に並び順を指定する比較関数を指定することができます。この比較関数は、正、負、0 のいずれかの値を返すものでなければなりません。
 また、reverse メソッドは、配列の順番を逆にするものです。この二つを連続使用することで、降順ソートを実現することができます。
 なお、これらは元の配列に対して並べ替えが行われます。戻り値を取得することもできますが、実体は元の配列そのものとなります。
sort([func]) : 要素を関数funcの規則(省略時は昇順)で並べ替える(IE4/NN3)
reverse() : 要素の順番を逆にする(IE4/NN3)
 * 昇順ソート : 小→大 の規則で並べ替えること / 降順ソート : 大→小 の規則で並べ替えること
// 昇順ソート
var a = new Array(33, 66, 99, 11, 44, 77, 22, 55, 88);
a.reverse();                // 反転ソート, a = (88, 55, 22, 77, 44, 11, 99, 66, 33)
a.sort();                     // 昇順ソート, a = (11, 22, 33, 44, 55, 66, 77, 88, 99)
// 降順ソート
var a = new Array(33, 66, 99, 11, 44, 77, 22, 55, 88);
a.sort().reverse();        // 降順ソート, a = (99, 88, 77, 66, 55, 44, 33, 22, 11)
// 比較関数を使用
function Compare(a, b) {
    return b-a;              // b-a が負なら並べ替えが行われる
}

var a = new Array(44, 22, 77, 55, 88, 66, 33);
a.sort(Compare);          // 比較関数でソート, a = (88, 77, 66, 55, 44, 33, 22)

www.sasaraan.net

(c) morijoh