ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript配列の詳しい解説_javascriptスキル
プログラミング言語における配列の重要性は自明のことですが、JavaScript の配列は最も一般的に使用されるオブジェクトの 1 つであり、弱い型であるため、非常に柔軟で強力です。同じ型またはそのサブタイプの要素のみを格納できる Java などの厳密に型指定された高級言語の配列とは異なり、JavaScript は複数の型の要素を同じ配列に格納でき、長さを動的に調整することもできます。データが増加するにつれて、または配列の長さの自動変更を減らします。
配列の作成
JavaScript でさまざまな方法で配列を作成する
コンストラクター
1. パラメーターなしのコンストラクター、空の配列を作成します
2. 配列の長さを指定し (配列の長さは動的に調整できるため、あまり役に立ちません)、指定された長さの配列を作成する数値パラメーター コンストラクター
3. 初期化データを含むコンストラクター、配列を作成し、パラメーター データを初期化します
文字通り
1. 角括弧を使用して空の配列を作成します。これはパラメーターなしのコンストラクター
を呼び出すのと同じです。2. 角括弧を使用して初期化データを渡します。これは、初期化データを使用してコンストラクターを呼び出すことと同じです
注意
1. コンストラクターを使用して配列を作成する場合、数値パラメーターが渡されると、そのパラメーターの長さの配列が作成されます。複数のパラメーターが渡されると、配列が作成されます。初期化データとして配列に追加されます
var a2=new Array(5,6);
console.log(a2.length);//2
console.log(a2); //[5,6]
ただし、リテラル メソッドを使用すると、渡されたパラメータの数に関係なく、パラメータは初期化コンテンツとして扱われます
console.log(a2.length);//2
console.log(a2); //[5,6]
最新のブラウザでこのスクリプトを実行した結果は想像したものと同じで、長さは 3 ですが、IE の下位バージョンでは実際に長さ 4 の配列であり、最後のデータは未定義です。
配列のインデックスと長さ
配列の値は、自然数インデックス アクセスを通じて読み書きでき、添字は結果の変数または式にすることもできます。負ではない整数
配列もオブジェクトです。インデックスを使用できる秘密は、配列がインデックス値をオブジェクトの属性名として対応する文字列 (1=>”1”) に変換することです。
console.log(1 in a1);//確かに、これは属性です。
インデックスの特徴は、配列が長さ属性を自動的に更新することです。これは、JavaScript 構文では数値を使用できないと規定されているためです。変数名として使用できるため、array.1 のような形式で明示的に使用することはできません。実際、負の数値や数値以外の「インデックス」も許可されることがわかりますが、これらはインデックスではなく配列の属性になります
このようにして、すべてのインデックスが属性名であることがわかりますが、一般に、配列を使用する場合、配列範囲外エラーは発生しません。これは配列のインデックスが連続していない可能性があります。インデックスが存在しない要素にアクセスした場合は、unknown
が返されます。上記の例では、a[100] に値を直接代入しても a[4] や a[99] には影響しませんが、配列の長さ属性は影響を受けます。配列内の最大のインデックス 1 は、配列の長さ属性値が最大インデックス値以下に強制的に設定されると、配列によって自動的に削除されます。インデックスが長さ以上のデータ。今コードにいくつかの文
を追加します。このとき、a[2] と a[100] が自動的に削除されることがわかります。同様に、length が最大インデックス 1 より大きい値に設定されている場合、配列は自動的に拡張されますが、追加は行われません。新しい要素は最後に空のスペースを追加するだけです
要素の追加・削除
基本的な方法
上記の例では、配列に要素を追加する方法を使用しています。インデックスを直接使用するだけです (インデックスは連続している必要はありません)
前に述べたように、配列もオブジェクトであり、インデックスは単なる特殊な属性であるため、オブジェクト属性を削除するメソッドを使用し、配列要素を削除するには delete を使用できます
これは、未定義に a[2] を直接代入するのと似ています。配列の長さは変更されません。また、他のデータのインデックスと値の対応関係も変更されません。
スタックメソッド
一部の学生は、上記の例、特に削除方法を常に発見していますが、これは私たちが望んでいる方法ではなく、中間の要素を削除した後、後続の要素のインデックスが自動的に減少することを期待することがよくあります。スタックから 1 つを取得するのと同じように、配列の長さも同時に 1 つ減ります。配列は、最初に配列を使用できるようにポップとプッシュを行うのに役立ちます。スタックを使用する場合と同様に最後に終了します
キューメソッド
stack メソッドが実装されたので、先入れ先出しキューをどのように減らすことができるでしょうか。shift メソッドは配列インデックスの最小の要素を削除し、後続の要素のインデックスを 1 つ減らすことができます。長さも 1 つ減少します。これは、shift/push Queue を使用してシミュレートできます。もちろん、配列の先頭に要素を追加するために使用される、shift メソッドに対応する unshift メソッドもあります。
究極のアーティファクト
JavaScript は、配列の追加と削除を一度に行う問題を解決するための splice メソッドを提供します (2 つのメソッドを組み合わせて置換効果を実現できます)。このメソッドには 3 つのパラメーターがあります。1. インデックス作成を開始します
2. 要素の変位を削除します
3. もちろん、複数の新しい要素を記述して
を挿入することもできます。
splice メソッドは、削除された要素で構成される新しい配列を返します。削除がない場合は空の配列を返します
最初の 2 つのパラメータを指定すると、スプライスを使用して配列要素を削除できます。これにより、インデックス調整と長さ調整も行われます
。
上記の例からわかるように、splice の最初のパラメータは、配列インデックスに対する相対値ではなく、絶対的なインデックス値です。2 番目のパラメータは、削除された要素の数ではなく、削除アクションの回数です。配列は実際にはインデックス方向に移動されますが、継続的に移動されます。同時に、後続の要素のインデックスが調整され、前のインデックスは無視されます
挿入と交換
メソッドの第2パラメータ、つまり削除アクションの実行回数を0に設定し、第3パラメータ以降に挿入する内容を記入すれば、spliceは挿入を行うことができます。という操作を行い、第二引数が0でない場合は削除してその位置に挿入するという置換効果となります
結合(文字)
このメソッドは、C# などの言語でも使用できます。その機能は、パラメーターをコネクタとして使用して、配列要素 (オブジェクトは toString() メソッドを呼び出します) を文字列に接続することです。
スプライス方法であるスライスと混同しないでください
concat(配列)
これは切断のように見えますが、実際には発音的な単語ではありません。 a.concat(b) は、a と b で構成される新しい配列を返します。元の配列も配列
内で再帰的に連結しません。メソッドは配列の順序を逆にするために使用されます。前のメソッドとの違いは、元の配列
を変更することです。同様に、配列のインデックスが連続していないか、0 から始まる場合は、結果に注意する必要があります
並べ替え
配列のソートにはsortメソッドを使用します。パラメータがない場合は、オブジェクト要素のtoStringを呼び出してアルファベットの昇順にソートされます。独自の定義に従って並べ替える場合は、並べ替えメソッドを渡すことができます。これは、並べ替えによって元の配列も変更されます。
sort は、2 つの要素のサイズを比較するたびに、パラメーターがない場合はアルファベットを直接決定します。パラメーターがある場合は、比較される 2 つのパラメーターがカスタム メソッドに渡されて呼び出されます。比較 2 つの数値はカスタム メソッドの v1 と v2 に渡されます)。戻り値が 0 より大きい場合は、v1>v2 を意味します。それが 0 より小さい場合は、v1=v2 を意味します。 0、それは v1 最後に