配列型
ECMAScript 配列の特別な点は、
1. 配列の各項目には任意のデータ型を格納できます
2. 配列の長さは動的に調整でき、新しいデータに対応するためにデータの追加に応じて自動的に拡張されます。
配列の作成方法
1.コンストラクターを使用する
var arr = 新しい配列()
var arr = new Array(20)//初期の長さは 20 です
var arr = new Array("1")//初期長 1
var arr = 新しい配列(“1”,1,2)
新しい演算子は効果を変えずに省略できます。
2. 配列リテラル
var arr = []
オブジェクトと同様、リテラルを使用してもコンストラクター new Array() は呼び出されません。
配列の長さプロパティ
配列の長さ属性は非常に特徴的です ----- 読み取り専用ではありません
この機能により、配列の末尾に要素を追加または削除できます (長さの値を変更します)。
配列の特定の位置に値を追加すると、代入されていない位置も存在し、値は不定になります
検出アレイ
arr instanceof Array 演算子を使用して配列であるかどうかを検出する場合の問題は、グローバル実行環境が 1 つだけであると想定していることです。Web ページに複数のフレームが含まれている場合、実際には 3 つ以上の異なるグローバル実行環境が存在するため、Array コンストラクタのバージョンが 3 つ以上あります。配列があるフレームから別のフレームに渡される場合、渡された配列と 2 番目のフレームでネイティブに作成された配列には、独自の異なるコンストラクタがあります。配列であるかどうか、どのグローバル実行環境で作成されたかは関係ありません。
配列変換
すべてのオブジェクトには toLocalString()、toString()、valueof() メソッドがあります。
配列は toString() メソッドを呼び出して、カンマ区切りの文字列を返します。
配列は valueof() メソッドを呼び出して配列を返します。
join()方法
配列は join() メソッドを呼び出し、指定された区切り文字で結合された配列文字列を返します。
join メソッドは 1 つのパラメータのみ受け入れます join("delimiter")
配列内の項目の値が null または未定義の場合、toLocalString()、toString()、valueof()、join() メソッドの項目によって返される結果は空の文字列 "" になります。
スタックメソッド
Push() は、任意の数のパラメータを受け取り、それらを配列の末尾に 1 つずつ追加し、配列の変更された長さを返します。
Pop() メソッドは、配列の最後の項目を削除し、配列の長さを減らし、削除された項目を返します。
キューメソッド
unshift() は任意の数のパラメータを受け取り、それらを配列の先頭に追加し、配列の変更された長さを返します。
SHIFT() メソッドは、配列の最初の項目を削除し、配列の長さを減らし、削除された項目を返します。
Pop() メソッドと SHIFT() メソッドを組み合わせると、配列をキューのように使用できるようになります。
並べ替え方法
reverse() は反転した配列を返します
sort() はデフォルトで昇順にソートし、ソートされた配列を返します。
sort() メソッドは、配列内の各項目の toString() 変換メソッドを呼び出し、取得した文字列を比較して並べ替え方法を決定します。配列項目の値が数値型であっても、比較は文字列でもあります。この並べ替え方法では、並べ替えエラーが発生することがあります。たとえば、昇順では 10 が 5 の前にランク付けされます。多くの場合、この並べ替え方法は最適な解決策ではありません。したがって、
sort() メソッドは比較関数をパラメータとして受け取ることができます。比較関数は 2 つのパラメータを受け取ります。降順で並べ替える場合は num2 ~ num1 を返し、昇順で並べ替える場合は num1 ~ num2 を返します。比較関数は正または負の数値または 0 を返すことで並べ替え結果に影響を与えるため、減算が非常に適しています。
操作方法
concat()
concat()
現在の配列内のすべての項目に基づいて新しい配列を作成します。つまり、このメソッドはまず現在の配列のコピー (新しい配列) を作成し、次に新しい配列の末尾にパラメーターを追加し、最後に新しい配列を返します。パラメータが渡されない場合、配列はコピーされます。渡されたパラメーターが 1 つ以上の配列である場合、メソッドはそれらのパラメーター配列の各項目を新しい配列に追加します。渡されたパラメータが配列でない場合は、新しい配列の末尾に追加されます。
スライス()インターセプト
スライス()インターセプト
このメソッドは、現在の配列内の 1 つ以上の項目に基づいて新しい配列を作成できます。
インターセプトには、開始位置と終了位置 (終了位置は含まれません) の 1 つまたは 2 つのパラメーターが必要です。パラメータが 1 つだけの場合は、開始位置から終了位置までのすべての項目がインターセプトされます。
パラメータに負の数値がある場合は、配列の長さにパラメータの結果を加えたものを実際のパラメータとして使用します。たとえば、配列の長さが 5 の場合、スライス(-2,-1) はスライス(3,4) と同じ効果があります。終了位置が開始位置より小さい場合は、空の配列が返されます。
スプライス()
splice() 配列の最も強力なメソッドで、削除、追加、置換が可能です。
削除の実現: 2 つのパラメータを指定します。パラメータ 1: 開始位置パラメータ 2: 削除する項目の数 (最初の 2 つの項目を削除する場合は splice(0,2) など)
**追加を実現する: **3 つのパラメータを指定します。パラメータ 1: 開始位置パラメータ 2: 0 (削除する項目の数を表し、0 は挿入のみで削除はしないことを意味します) パラメータ 3: 追加する項目 (追加する項目が複数ある場合は、複数の項目を渡し続けることができます) など、splice(1,0,"22", "99") のように配列の添字 1 から項目を追加します。
** 置換の実現: ** 指定した位置から任意の数の項目を追加し、同時に任意の数の項目を削除するには、3 つのパラメータを指定する必要があります。パラメータ 1: 開始位置パラメータ 2: 削除する項目の数パラメータ 3: 挿入する項目の任意の数。挿入された項目の数は、削除された項目の数と同じである必要はありません。たとえば、 splice(2,1,"k",'l') は、配列の位置 2 にある項目を削除し、位置 2 から新しい要素を挿入します。
splice() メソッドは常に、削除された項目を含む新しい配列を返します。何も削除されなかった場合は空の配列を返します。
ロケーションメソッド
IndexOf(検索する項目, [開始位置]) 前から後ろに検索し、検索された要素のインデックスを返します。見つからない場合は -1 を返します
lastIndexOf (検索対象の項目, [開始位置]) 後ろから前に向かって検索し、検索された要素のインデックスを返します。見つからない場合は -1 を返します
検索された要素と配列内の各項目を比較する場合、最下層は === 合同演算子を使用します。
反復法
ECMAScript では配列に対して 5 つの反復メソッドが定義されており、これらのメソッドは 2 つのパラメーターを受け取る必要があります。パラメータ 1: 各項目に対して実行する関数; パラメータ 2 (オプション): 関数を実行するスコープ オブジェクト - この値に影響します。パラメーター 1 の関数は、配列アイテム、インデックス、配列オブジェクト自体の値である 3 つのパラメーター (アイテム、インデックス、配列) を受け取る必要があります。
Every(): 配列の各項目に対して指定された関数を実行し、各項目が true を返す場合、結果は true になります。
filter(): 配列の各項目に対して指定された関数を実行し、結果が true である項目の配列を返します。
forEach(): 配列の各項目に対して指定された関数を戻り値なしで実行します。基本的に for ループを使用して配列を反復するのと同じです。
map(): 配列の各項目に対して指定された関数を実行し、関数が呼び出されるたびに取得された結果の配列を返します。
some(): 配列の各項目に対して指定された関数を実行します。いずれかの項目が true を返した場合、結果は true になります。
上記のいずれの方法でも、元の配列の値は変更されません。
使用例
var numbers = [1,2,3,4,5,4,3,2,1]
var everyResult = numbers.every(function(item,index,array){
return (item>2)
})
console.log(everyResult);//false
var someResult = numbers.some(function(item,index,array){
return (item>2)
})
console.log(someResult);//true
var filterReslt = numbers.filter(function(item,index,array){
return (item>2)
})
console.log(filterReslt);//Array(5) [ 3, 4, 5, 4, 3 ]
var mapReslt = numbers.map(function(item,index,array){
return (item*2)
})
console.log(mapReslt);//Array(9) [ 2, 4, 6, 8, 10, 8, 6, 4, 2 ]
numbers.forEach(function(item,index,array){
//数组的每一项执行某些操作,本质与使用for循环一样
console.log(item);
})
マージ方法
reduce() は配列の先頭から最後の項目までを繰り返します。
reduceRight() 配列の最後の項目から最初の項目までを繰り返します。
これらのメソッドは両方とも、配列内のすべての項目を反復処理して、最終的な戻り値を構築します。これらはすべて 2 つのパラメータ、パラメータ 1 (オプション): 各項目で呼び出す関数、パラメータ 2 (オプション): マージ ベースの初期値を受け取ります。パラメーター 1 の関数は、前の値、現在の値、項目のインデックス、および配列オブジェクトの 4 つのパラメーターを受け取ります。この関数の戻り値は、次回関数を実行するときに関数のパラメータ 1 として自動的に次の項目に渡されます。
最初の反復は配列の 2 番目の項目で発生するため、パラメータ 1 は添字 0 の項目、パラメータ 2 は添字 1 の項目、
Reduce() と ReduceRight() のどちらを使用するかは、配列のどちら側で走査を開始するかによって決まります。それ以外の場合、2 つのメソッドの間に違いはありません。
使用例
//数组求和
var numbers = [1,2,3,4,5,4,3,2,1]
var reduceResult = numbers.reduce(function(pre,cur,index,array){
return (pre+cur)
})
console.log(reduceResult);//25
//reduceRight() 作用相似,只不过方向相反