JavaScript配列とloops_javascriptスキルの詳しい説明
配列は、要素を順序付けて組み合わせたものです。 JavaScript では、配列は形式的なオブジェクト表記法を使用して作成することも、リテラル表記法を使用して初期化することもできます。
var arrObject = new Array("val1", "val2") // オブジェクトとしての配列
; var arrLiteral = ["val1", "val2"] // 配列リテラル
;
開発者にとっては違いはありません。Array メソッドはリテラルとオブジェクトの両方で呼び出すことができます。 JavaScript エンジンの場合、配列リテラルは、特に関数内で使用される場合、アクセスされるたびに再解釈する必要があります。
new 演算子を使用して、新しい Array オブジェクトを作成します:
var arrObject = new Array();
特定の値を使用して新しい配列を作成することもできます:
var arrObject = new Array("val1", "val2");
JavaScript の配列には 0 からインデックスが付けられます。これは、最初の要素のインデックスが 0 で、最後の要素が配列の長さから 1 を引いたものであることを意味します。
1. 配列
をループします。問題: 配列のすべての要素に簡単にアクセスしたい。
解決策:
配列にアクセスするには、for ループを使用するのが最も一般的な方法です。
<スクリプトタイプ="text/javascript">
var 動物 = new Array("猫", "犬", "クジラ", "アザラシ");
var AnimalString = "";
for (var i = 0; i
動物文字列 = 動物[i] " ";
}
アラート(animalString);
ディスカッション:
for ループを使用して、配列の各要素にアクセスできます。配列は 0 から始まり、配列プロパティの長さはループの終了を設定するために使用されます。
2.
の順序で値を保存およびアクセスします。問題: 保存された方法で順次アクセスできるように値を保存したい。
解決策:
受信した順序で値を保存してアクセスするには、先入れ先出し (FIFO) キューを作成します。 JavaScript Array オブジェクトの Push メソッドを使用して項目をキューに追加し、shift を使用して項目を取得します。
<スクリプトタイプ="text/javascript">
// 新しい配列を作成します
var queue = new Array();
// 3 つのアイテムをプッシュ
Queue.push("最初");
Queue.push("2 番目");
Queue.push("3 番目");
// 2 つのエントリを取得します
アラート(queue.shift());
アラート(queue.shift());
アラート(キュー);
ディスカッション:
配列プッシュ メソッドは、新しい配列要素を作成し、それを配列の末尾に追加します。
queue.push("first");
要素がプッシュされるたびに、配列要素の数が増加します。
Array シフト メソッドは、配列の先頭から配列要素を抽出し、配列から削除して、その要素を返します。
var elem = queue.shift();
シフト操作は項目を返すだけでなく配列も変更するため、シフト操作の要素ごとに配列要素がデクリメントされます。
3. 逆の順序で値を保存およびアクセスします
問題: 逆の順序で値にアクセスし、最後に保存された値に最初にアクセスする方法 (後入れ先出し (LIFO) スタック) で値を保存したいと考えています。
解決策:
値を逆の順序で保存するには、LIFO スタックを作成します。 JavaScript Array オブジェクトの Push メソッドを使用して項目をスタックに追加し、pop メソッドを使用して項目を取得します:
<スクリプトタイプ="text/javascript">
// 新しい配列を作成します
var stack = new Array();
// 3 つのアイテムをプッシュ
stack.push("first");
stack.push("2番目");
stack.push("3 番目");
// 2 つの項目をポップアップします
alert(stack.pop()); // 3 番目の項目を返します
alert(stack.pop()) // 2 番目の項目を返します
alert(stack) // 最初の項目を返します
ディスカッション:
スタックも配列であり、新しく追加された各要素はスタックの最上位にあり、後入れ先出しの順序で取得されます。
配列プッシュ メソッドは、新しい要素を作成し、それを配列の末尾に追加します。
stack.push("最初");
要素がプッシュされるたびに、配列要素の数が増加します。
Array Pop メソッドは、配列の末尾から配列要素を抽出し、配列から削除して、その要素を返します。
var elem = stack.pop();
要素がポップされるたびに、ポップによって配列も変更されるため、配列要素数は減分されます。
4. 配列
内を検索します。質問: 配列内の特定の値を検索し、見つかった場合は配列要素のインデックスを取得したいと考えています。
解決策:
新しい (ECMAScript 5) Array オブジェクト メソッド indeOf および lastIndexOf を使用します。
<スクリプトタイプ="text/javascript">
var Animals = new Array("犬", "猫", "アザラシ", "ゾウ", "ライオン");
alert(animals.indexOf("elephant")); // 3
を出力します。 alert(animals.indexOf("seal", 2)); // 2
を出力します。
ブラウザは、indexOf と lastIndexOf の両方をサポートする場合がありますが、これは ECMAScript 5 バージョンでのみ正式化されています。どちらのメソッドも検索値を受け入れ、その値が配列内の各要素と比較されます。値が見つかった場合、両方のメソッドは配列要素にインデックスを返します。値が見つからない場合は、-1 が返され、indexOf は見つかった最初の要素を返し、lastIndexOf は見つかった最後の要素を返します。
参照:
すべてのブラウザがindexOf と lastindexOf をサポートしているわけではありません。この関数の解決策は次のとおりです。
<スクリプトタイプ="text/javascript">
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (elt/*, from*/) {
var len = this.length >>> 0;
var from = 数値(引数[1]) || 0;
から = (
if (
from = len;
}
for (; from < len; from ) {
if (from this && this[from] === elt) {
から戻ります;
}
}
return -1;
}
}
5、对每个数字元素应用一関数数
問題: 1 つの関数を使用して数値の値を検査することを想定しています。十分な条件が満たされる場合は、その関数が置き換えられます。
解法案:各メソッドに新しい ECMAScript 5 配列オブジェクトを使用します。来针对每数集合元素都绑定一回调関数:
関数 replaceElement(要素、インデックス、配列) {
if (要素 == "ab") {
配列[インデックス] = "**";
}
}
var charSets = new Array("ab", "bb", "cd", "ab", "cc", "ab", "dd", "ab");
//对每数组元素应用関数数
charSets.forEach(replaceElement)
アラート(charSet); // 打印**,bb,cd,**,cc,**,dd,**
各メソッドは 1 つのパラメータを受け取ります。このパラメータは関数です。この関数には、それ自体に 3 つのパラメータがあります: 数要素、要素のインデックス、および数組。
参见:
ほとんどのデバイスはすべて forEach をサポートします。ただし、サポートされていないデバイスについては、Array.prototype プロパティを使用して forEach を模倣できます。
Array.prototype.forEach = function (fun/*, thisp*/) {
var len = this.length >>> 0;
if (typeof fun != "関数") {
throw new TypeError();
}
var thisp = argument[1]; for (var i = 0; i if (私はこれにいます) {
fun.call(thisp, this[i], i, this);
}
}
};
}
6. フィルターされた配列
を作成します。質問: 配列内の要素の値をフィルターし、結果を新しい配列に代入したいと考えています。
解決策:
Array オブジェクトのフィルター メソッドを使用します:
<スクリプトタイプ="text/javascript">
関数removeChars(要素、インデックス、配列) {
戻り要素 !== "**";
}
var charSets = new Array("**", "bb", "cd", "**", "cc", "**", "dd", "**");
var newArray = charSets.filter(removeChars);
アラート(newArray); // bb,cd,cc,dd
ディスカッション:
filter メソッドは ECMAScript 5 で新しく追加されたメソッドで、配列の各要素にコールバック関数を適用します。フィルター メソッドにパラメーターとして渡された関数は、配列要素のテストの結果に基づいて、ブール値 (true または false) を返します。この戻り値は、配列要素が新しい配列に追加されるかどうかを決定します。関数が true を返した場合は追加され、それ以外の場合は追加されません。
参照:
フィルタメソッドをサポートしていないブラウザのシミュレーション実装の場合:
<スクリプトタイプ="text/javascript">
If (!Array.prototype.filter) {
Array.prototype.filter = function (fun/*, thisp*/) {
var len = this.length >>>
If (typeof fun != "関数") {
throw new TypeError();
}
var res = new Array();
var thisp = argument[1];
for (var i = 0; i
If (私はこれにいます) {
var val = this[i] // fun を配置するとこれが変更されます
;
If (fun.call(thisp, val, i, this)) {
res.push(val);
}
}
}
応答を返す;
};
}
7. 配列の内容を確認します
問題: 配列が特定の条件を満たしていることを確認したい。
解決策:
Array オブジェクトの each メソッドを使用して、指定された条件の各要素を確認します。
<スクリプトタイプ="text/javascript">
関数 testValue(要素、インデックス、配列) {
var re = /^[a-zA-Z] $/;
return re.test(element);
}
var elemSet = new Array("**", 123, "abc", "-", "AAA");
alert(elemSet.every(testValue));
ディスカッション:
Array オブジェクトの each メソッドと some メソッドはどちらも最新の ECMAScript 5 Array メソッドです。違いは、every メソッドを使用する場合、関数が false 値を返す限り、処理は終了し、メソッドは false を返すことです。 。 some メソッドは、コールバック関数が true を返すまで、各配列要素のテストを続けます。現時点では、他の要素は検証されず、このメソッドは true を返します。コールバック関数がすべての要素をテストし、いつでも true を返さない場合、一部のメソッドは false を返します。
参照:
一部をサポートしていないブラウザの実装方法:
<スクリプトタイプ="text/javascript">
If (!Array.prototype.some) {
Array.prototype.some = function (fun/*, thisp*/) {
var i = 0,
len = this.length >>>
If (typeof fun != "関数") {
throw new TypeError();
}
var thisp = 引数[1];
for (; i
もし(私がこの中にいるなら
&& fun.call(thisp, val, i, this)) {
true を返します
}
}
false を返します;
};
}
if (!Array.prototype.every) {
Array.prototype.every = function (fun/*, thisp*/) {
var len = this.length >>>
If (typeof fun != "関数") {
throw new TypeError();
}
var thisp = 引数[1];
for (var i=0; i
もし(私がこの中にいるなら
&& fun.call(thisp, val, i, this)) {
false を返します
}
}
true を返します;
};
}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









foreach ループを使用して PHP 配列から重複要素を削除する方法は次のとおりです。配列を走査し、要素がすでに存在し、現在の位置が最初に出現しない場合は、要素を削除します。たとえば、データベース クエリの結果に重複レコードがある場合、このメソッドを使用してそれらを削除し、重複レコードのない結果を取得できます。

PHP で配列をディープ コピーする方法には、json_decode と json_encode を使用した JSON エンコードとデコードが含まれます。 array_map と clone を使用して、キーと値のディープ コピーを作成します。シリアル化と逆シリアル化には、serialize と unserialize を使用します。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

PHP の array_group_by 関数は、キーまたはクロージャ関数に基づいて配列内の要素をグループ化し、キーがグループ名、値がグループに属する要素の配列である連想配列を返すことができます。

PHP で配列のディープ コピーを実行するためのベスト プラクティスは、 json_decode(json_encode($arr)) を使用して配列を JSON 文字列に変換し、それから配列に戻すことです。 unserialize(serialize($arr)) を使用して配列を文字列にシリアル化し、それを新しい配列に逆シリアル化します。 RecursiveIteratorIterator を使用して、多次元配列を再帰的に走査します。

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP 配列のマージおよび重複排除アルゴリズムは、元の配列を小さなブロックに分割して並列処理する並列ソリューションを提供し、メイン プロセスは重複排除するブロックの結果をマージします。アルゴリズムのステップ: 元の配列を均等に割り当てられた小さなブロックに分割します。重複排除のために各ブロックを並行して処理します。ブロックの結果をマージし、再度重複排除します。

PHP の array_group() 関数を使用すると、指定したキーで配列をグループ化し、重複する要素を見つけることができます。この関数は次の手順で動作します。 key_callback を使用してグループ化キーを指定します。必要に応じて、value_callback を使用してグループ化値を決定します。グループ化された要素をカウントし、重複を特定します。したがって、array_group() 関数は、重複する要素を見つけて処理するのに非常に役立ちます。
