配列変数

一般

配列の作成

//配列の作成
arr1=new Array(要素数);    //要素数を指定して作成
arr2=new Array();     //要素数を省略
arr3=new Array(値,値,値,・・・・);    //値を指定
arr4=[要素数];
arr5=[];
arr6=[値,値,値,・・・・];

要素数を省略して作成した場合、値を格納する時に自動的に要素数が拡張されます。以下のように途中の要素をスキップして値を格納してもその要素数まで自動的に要素数が拡張されます。

arr2=new Array();
length1=arr2.length;
arr2[10]=1;
length2=arr2.length;
alert(length1+":"+length2);

結果

0:11

配列のクリア

配列にデータを代入後、その値を全てない状態にするには、以下の例(3通り)のようにしてクリアします。

//配列の作成
var fruits = ["apple","blueberry","cherry","grape","orange"];

//配列のクリア(その1)
//配列の長さ(length)の要素を0(ゼロ)にする。
fruits.length = 0;

//配列のクリア(その2)
//新たに配列を作成して初期化する。
fruits = [];

//配列のクリア(その3)
//新たに配列を作成して初期化する。
fruits = new Array();

要素の削除

  1. delete演算子 delete演算子で配列の要素を削除しても、「配列の長さ」は変化しません。削除した要素は「undefined」になります。
    //配列の作成
    var fruits = ["apple","blueberry","cherry","grape","orange"];
    delete fruits[1];
    
    としてもfruits[1]は「undefined」になり、fruits[2]は"cherry"のままで、fruits.lengthも「5」のままです。
  2. spliceメソッド 配列の指定箇所から削除する要素数をしてして削除します。(本来は置換を行うメソッドです。)
    値のみでなく要素を削除するので要素数は少なくなります。
    //配列の作成
    var fruits = ["apple","blueberry","cherry","grape","orange"];
    //要素の削除
    fruits.splice(2,2);
    
    配列 fruits の内容は ["apple","blueberry","orange"]となり、fruits.lengthは「3」になります。 削除すると要素数が少なくなるので、spliceメソッドを使用して連続して要素を削除する場合注意が必要です。要素数が少なくなることを考慮して削除します。例えば次のようにデータの値が連続で重複していて、データの値をキーとして削除する場合、単純に配列のインデックスを増加した場合削除漏れが発生します。
    //配列の作成
    var fruits = ["apple","blueberry","cherry","grape","grape","orange"];
    for(i=0; i<fruits.length; i++){
        if(fruits[i] == "grape"){
            //spliceメソッドで要素を削除
            fruits.splice(i, 1);
        }
    }
    //出力
    document.write(fruits);
    
    上記結果は以下のようになります。
    apple,blueberry,cherry,grape,orange
    
    これは、1回目(i = 3)にgrapeを削除した時に5番目のgrapeが4番目(i = 3)になり、orangeが5番目(i = 4)になっているため、次のループi = 4でのif文ではgrapeが比較されずにorangeが比較されるためです。
    この対応策の一例として以下のように配列の大きい方から処理します。
    //配列の作成
    var fruits = ["apple","blueberry","cherry","grape","grape","orange"];
    for(i=fruits.length-1; 0<=i; i--){
        if(fruits[i] == "grape"){
            //spliceメソッドで要素を削除
            fruits.splice(i, 1);
        }
    }
    //出力
    document.write(fruits);
    

配列のチェック

変数が配列かどうかチェックするには、ArrayクラスのisArrayメソッドを使用します。
構文

Array.isArray(obj)
引数
    obj :  チェックするオブジェクト 
返り値
    true  :  配列
    false :  配列ではない

変数をarrとすると以下のようになります。

if ( Array.isArray(arr) == true  ) {
    alert('配列');
} else {
    alert('配列ではない');
}

使用しているブラウザーがisArrayメソッドをサポートしていない場合は、配列の属性(length)にアクセスしてエラー(undefined)になるかどうかで確認します。

if ( arr.length === undefined  ) {
    alert('配列ではない');
} else {
    alert('配列');
}

上記の互換性を持たせるには以下のコードを他のコードよりも前に記述します。

if(!Array.isArray) {  
    Array.isArray = function (vArg) {
        return !(vArg.length === undefined);  
    };  
}

連想配列

連想配列は通常の配列と色々な面で違いがあります。

要素の設定

//連想配列の作成
var fruits = {a:"apple", b:"blueberry", c:"cherry", g:"grape", o:"orange"};

要素の取得

連想配列から要素を取得する場合は、以下のようにします。

//連想配列の作成
var fruits = {a:"apple", b:"blueberry", c:"cherry", g:"grape", o:"orange"};
// データの取得
for ( var key in fruits ) {
    fruit = fruits[key];
}

重要:連想配列からデータを取り出す場合、その順番は保障されません。データを配列にセットした順番にデータが取り出されませんし、キーでソートもできないので取り出す時に規則性を持たしたい時は工夫が必要です。

要素の削除

//連想配列の要素を削除
delete object.a;
//この書き方でも削除できます
delete object['a'];

オブジェクトの全ての要素を削除する

//連想配列をループ
for(var key in object){
    //連想配列の要素を一つずつ削除していく
    delete object[key];
}

要素数

配列の要素数は「配列.length」で取得可能ですが、連想配列では「配列名.length」では取得できません(「null」が返されます)。 連想配列の場合、Objectの「keys」メソッドを使用すれば要素数を取得できます。

Object.keys(オブジェクト);

「keys」メソッドは、引数に指定されたオブジェクトで直接発見された列挙可能なプロパティに対応する文字列を要素とする配列を返します。

そのため次のようにすれば、連想配列の要素数を取得できます。

Object.keys(配列名).length;
//連想配列の作成
var fruits = {a:"apple", b:"blueberry", c:"cherry", g:"grape", o:"orange"};
//配列の要素数を計算
var cnt = Object.keys(fruits).length;

上の場合、要素数cntは「5」となります。


最終更新のRSS
Last-modified: 2015-12-13 (日) 01:49:33 (3056d)