配列の作成
js での配列の宣言は次の方法で行うことができます:
var arr = []; // 简写模式 var arr = new Array(); // new一个array对象 var arr = new Array(arrayLength); // new一个确定长度的array对象
次のことに注意してください:
配列内の一貫性のない要素タイプの例を示します:
var arr = [1, 2, 3, 4, 'wangzhengyi', 'bululu']; for (var i = 0; i < arr.length; i ++) { console.log(arr[i]); }
配列要素へのアクセス
JavaScript 配列のインデックス値も 0 から始まります。配列名の添字を使用して配列要素に直接アクセスできます。
サンプルコードは次のとおりです:
var arr = [1, 2, 3]; console.log(arr[0]); console.log(arr[1]);
さらに、配列の走査には連続 for ループ モードを使用することをお勧めします。特定の理由により、for-in は推奨されません。「JavaScript での配列のループ」を参照してください。
配列を走査するサンプル コードは次のとおりです:
var arr = [1, 2, 3, 4, 'wangzhengyi', 'bululu']; for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); }
注:
上記のコードでは、配列のサイズを事前に取得するための小さな最適化が行われています。これにより、配列を走査するたびに配列のサイズをクエリする必要がなくなります。非常に大規模なアレイの場合、一定の効率を向上させることができます。
配列要素の追加
配列に新しい要素を追加するには、プッシュ、シフト解除、スプライスという 3 つの方法があります。以下ではこれら3つの方法をそれぞれ紹介していきます。
プッシュ
push メソッドは配列の末尾に要素を追加します。サンプルコードは次のとおりです:
var arr = []; arr.push(1); arr.push(2); arr.push(3); for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); }
実行結果は次のようになります:
1 2 3
シフト解除
unshift メソッドは、配列の先頭に要素を追加します。サンプルコードは次のとおりです:
var arr = []; arr.unshift(1); arr.unshift(2); arr.unshift(3); for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); }
実行結果は以下の通りです:
3 2 1
スプライス
splice メソッドは、配列内の指定された位置に新しい要素を挿入し、前の要素は自動的に順番に戻されます。 splice の関数プロトタイプは次のとおりであることに注意してください:
array.splice(index, howMany, element...)
howMany は、削除する要素の数を示します。要素を追加するだけの場合は、この時点で howMany を 0 に設定する必要があります。
サンプルコードは次のとおりです:
var arr = [1, 2, 3, 4]; arr.splice(1, 0, 7, 8, 9); for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); }
実行結果は以下の通りです:
1 7 8 9 2 3 4
配列要素を削除します
配列に要素を追加する場合と同様に、配列内の要素を削除するには、ポップ、シフト、スプライスの 3 つの方法があります。次に、これら 3 つの機能の使い方をそれぞれ説明します。
ポップ
pop メソッドは、配列の最後の要素を削除します。プッシュとポップを組み合わせることで、スタックと同様の配列の機能(先入れ後出し)を実現できます。サンプルコードは次のとおりです:
var arr = []; arr.push(1); arr.push(2); arr.push(3); while (arr.length != 0) { var ele = arr.pop(); console.log(ele); }
シフト
shift メソッドは最初の要素を削除し、配列内の要素は自動的に前方に移動されます。 (この方法は効率の問題に確実に対応しており、時間計算量は O(n) です)。
var arr = []; arr.push(1); arr.push(2); arr.push(3); function traverseArray(arr) { for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); } } while (arr.length != 0) { var ele = arr.shift(); traverseArray(arr); }
誰もが自分自身で結果を検討できます。
スプライス
配列要素を追加するときに、この関数プロトタイプには howMany パラメーターがあり、インデックスから開始して削除される要素の数を表します。
サンプルコードは次のとおりです:
var arr = [1, 2, 3, 4, 5, 6, 7]; function traverseArray(arr) { for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); } } arr.splice(1, 3); traverseArray(arr);
実行結果は次のとおりです:
1 5 7
配列のコピーとインターセプト
たとえば、コードは次のとおりです:
var arr1 = [1, 2, 3, 4]; var arr2 = arr1;
現時点では、arr2 は arr1 配列のアドレスをヒープ メモリに保存するだけで、ヒープ メモリにメモリを再適用して配列を作成することはありません。したがって、arr2 への変更は arr1 にも同時に影響します。では、配列をコピーする必要がある場合はどうすればよいでしょうか?これにより、slice 関数と concat 関数を学習する必要があります。
スライス
ここでのスライスは Python 構文のスライスと同じで、どちらも配列のスライスを返します。スライス関数のプロトタイプは次のとおりです:
array.slice(begin, end)
begin から end までのすべての要素を返します。begin は含まれますが、end は含まれないことに注意してください。
デフォルトの開始値はデフォルトで 0 から始まります。デフォルトの終端は配列の終端です。
したがって、次のコードを通じて配列をコピーできます:
var arr1 = [1, 2, 3, 4]; var arr2 = arr1.slice(); arr2[2] = 10000 function traverseArray(arr) { for (var i = 0, len = arr.length; i < len; i ++) { console.log(arr[i]); } } traverseArray(arr1); traverseArray(arr2);
実行結果は以下の通りです:
1 2 3 4 1 2 10000 4
連結
concat メソッドは新しい配列を作成し、それを呼び出すオブジェクト (this が指すオブジェクト) の要素と、すべてのパラメーターの配列型パラメーターと非配列型パラメーター自体の要素を配置します。これに順番に新しい配列を入れて配列を返します。
サンプルコードは次のとおりです:
var alpha = ["a", "b", "c"]; var number = [1, 2, 3] // 新数组为["a", "b", "c", 1, 2, 3] var complex = alpha.concat(number);