イテレータメソッド
これらのメソッドは、配列内の各要素に関数を適用し、値、値のセット、または新しい配列を返すことができます。
1新しい配列を生成しないイテレータメソッド
forEach()の場合、このメソッドは関数をパラメーターとして受け取り、配列内の各要素の関数を使用します。
関数square(num){ console.log(num、num * num); } var nums = [1,2,3,4,5,6,7,8,9,10]; nums.forEach(square);
every()の場合、このメソッドはブール型の戻り値を持つ関数を受け入れ、配列内の各要素に対してこの関数を使用します。関数がすべての要素に対してtrueを返す場合、メソッドはtrueを返します。
function isEven(num){ return num%2 == 0; }
var nums = [2,4,6,8,10];
vareven = nums.every(isEven);
if(even){ console.log( "すべての数値が偶数"); } else { console.log( "すべての数値が偶数ではない"); }
出力は次のとおりです。すべての数値は偶数です
配列を次のように変更します。varnums= [2,4,6,7,8,10];
出力は次のとおりです。すべての数値が偶数であるとは限りません
some()メソッドは、戻り値がブール型の関数も受け入れます。関数がtrueを返す要素がある限り、メソッドはtrueを返します。
といった:
function isEven(num){ return num%2 == 0; }
var nums = [1,2,3,4,5,6,7,8,9,10];
var someEven = nums.some(isEven)
if(someEven){ print( "いくつかの数字は偶数です"); } else { print( "数字は偶数ではありません"); }
いくつかの数値が偶数を出力します
nums = [1,3,5,7,9];
someEven = nums.some(isEven);
if(someEven){ console.log( "いくつかの数字は偶数です"); } else { console.log( "数字は偶数ではありません"); }
出力番号は偶数ではありません
reduce()メソッドは関数を受け取り、値を返します。このメソッドは、累積値から開始し、配列内の累積値と後続の要素に対してこの関数を呼び出し続け、配列内の最後の要素まで呼び出し、最後に累積値を返します。
function add(runningTotal、currentValue){ return runningTotal + currentValue; }
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
console.log(sum); //再示55
実装プロセス
add(1,2)-> 3
add(3,3)-> 6
add(6,4)-> 10
add(10,5)-> 15
add(15,6)-> 21
add(21,7 )-> 28
add(28,8)-> 36
add(36,9)-> 45
add(45,10)-> 55
reduce()メソッドを使用して、配列内の要素を長い文字列に連結することもできます。
function concat(accumulatedString、item){ return AccumulatedString + item; }
var words = ["the"、 "quick"、 "brown"、 "fox"];
var文= words.reduce(concat);
console.log(文); //再示「クイックブラウンフォックス」
reduceRight()メソッドは、右から左に実行されるという点で、reduce()メソッドとは異なります。
function concat(accumulatedString、item){ return AccumulatedString + item; }
var words = ["the"、 "quick"、 "brown"、 "fox"];
var文= words.reduceRight(concat);
console.log(文); //再示「フォックスブラウンクイック」
2新しい配列を生成するためのイテレータメソッド
map()とfilter()の2つのイテレータメソッドで新しい配列を生成できます。map()はforEach()に少し似ており、配列内の各要素に関数を使用します。2つの違いは、map()が、元の要素に関数を適用した結果である要素を持つ新しい配列を返すことです。
関数curve(grade){ return grade + = 5; }
var grades = [77、65、81、92、83];
var newgrades = grades.map(curve);
console.log(newgrades); // [82、70、86、97、88]
文字列配列でmap()メソッドを使用する例:
function first(word){ return word [0]; }
var words = ["for"、 "your"、 "information"];
var acronym = words.map(first);
console.log(acronym.join( "")); //再示fyi
頭字語配列は、単語配列の各要素の最初の文字を格納します。ただし、配列を真の省略形で表示する場合は、各配列要素を接続しているコンマを削除する方法を見つける必要があります。toString()メソッドを直接呼び出すと、コンマが表示されます。join()メソッドを使用して、空の文字列をパラメーターとして渡すと、この問題の解決に役立ちます。
簡単に言うと、単語[0]は、配列要素の最初の文字を取得し、それを新しい配列に戻して[f、y、i]を取得することです。
次に、join( "")メソッドを使用してカンマを削除し、文字列に変換します。
filter()はevery()に似ており、戻り値がブール値の関数を渡します。every()メソッドとの違いは、関数が配列内のすべての要素に適用され、結果がtrueの場合、メソッドはtrueを返さず、関数をtrue要素に適用した結果を含む新しい配列を返すことです。 。
function isEven(num){ return num%2 == 0; }
Isodd関数(num){ return num%2!= 0; }
var nums = [];
for(var i = 0; i <20; ++ i){ nums [i] = i + 1; }
varevens = nums.filter(isEven);
console.log( "偶数:" +偶数); //偶数:[2,4,6,8,10,12,14,16,18,20]
var odds = nums.filter(isOdd);
console.log( "奇数:" +奇数); 奇数:[1,3,5,7,9,11,13,15,17,19]
filter()メソッドを使用する興味深いケース:
関数passing(num){ return num> = 60; }
var grades = [];
for(var i = 0; i <20; ++ i){ grades [i] = Math.floor(Math.random()* 101); }
var passGrades = grades.filter(passing);
console.log( "All grades:");
console.log(grades); // [ 63、81、11、47、83、19、53、89、39、54 、94、3、84、71、3、61、96、2、62、2 ]
console.log( "合格点:");
console.log(passGrades); // [63、81、83、89、 94、84、71、61、96、62]フィルターが60未満
filter()メソッドを使用して文字列配列をフィルタリングすることもでき
ます。functionafterc(str){ if(str.indexOf ( "cie")> -1){ return true; }
falseを返します。
}
var words = ["recieve"、 "deceive"、 "percieve"、 "deceit"、 "concieve"];
var misspelled = words.filter(afterc);
console.log(スペルミス); //再示受信、実行、実行
2次元および多次元配列
JavaScriptは1次元配列のみをサポートしますが、配列要素を配列に格納することにより、多次元配列を簡単に作成でき
ます。このセクションでは、JavaScriptで2次元配列を作成する方法について説明します。
12次元配列を作成します
2次元配列は、行と列で構成されるデータテーブルに似ています。JavaScriptで2次元配列を作成するには、最初に配列を作成してから、配列の各要素を配列にする必要があります。少なくとも、2次元配列に含まれる行数を知る必要があります。この情報を使用して、n行1列の2次元配列を作成できます。
入力パラメータに応じて、配列の行数、列数、初期値が設定されます。
Array.matrix = function(numrows、numcols、initial){ var arr = []; for(var i = 0; i <numrows; ++ i){ var columns = []; for(var j = 0; j < numcols; ++ j){ columns [j] = initial; } arr [i] = columns;
}
到着を返す;
}
var nums = Array.matrix(5,5,0);
console.log(nums [1] [1]); //再示0
var names = Array.matrix(3,3、 "");
names [1] [2] = "ジョー";
console.log(names [1] [2]); //ジョー
初期値のセットを作成して使用し、1行のコードで2次元配列を初期化することもできます:
var grades = [[89、77、78]、[76、82、81]、[91、
94、89 ]]; console.log(grades [2] [2]); // 89を表示
小規模データの場合、これは2次元配列を作成する最も簡単な方法です。
22次元配列の要素を処理します
2次元配列の要素を処理するには、列アクセスと行アクセスの2つの基本的な方法があります。
var grades = [
[89、77、78
]、
[76、82、81 ]、[91、94、89]
];
var total = 0;
変数平均= 0.0;
for(var row = 0; row <grades.length; ++ row){ for(var col = 0; col <grades [row] .length; ++ col){ total + = grades [row] [col]; } 平均=合計/成績[行] .length; console.log( "学生" + parseInt(row + 1)+ "平均数:" + average.toFixed(2)); 合計= 0; 平均= 0.0; }
学生1の平均:81.33
学生2の平均:79.67
学生3の平均:91.33
3ギザギザの配列
ギザギザの配列は、指数グループの各行の要素の数が互いに異なることです。1つの行に3つの要素が含まれる場合、別の行に5つの要素が含まれる場合、一部の行に1つの要素のみが含まれる場合もあります。多くのプログラミング言語は、このようなギザギザの配列を処理するときにうまく機能しませんが、各行の長さを計算できるため、JavaScriptはうまく機能します。
var grades = [
[89、77]、
[76、82、81]、
[91、94、89、99]
];
var total = 0;
変数平均= 0.0;
var data = []
for(var row = 0; row <grades.length; ++ row){ for(var col = 0; col <grades [row] .length; ++ col){ total + = grades [row ] [col]; } 平均=合計/成績[行] .length; data.push(average.toFixed(2)) console.log( "Student" + parseInt(row + 1)+ "average:" + average.toFixed(2)); 合計= 0; 平均= 0.0; }
console.log(data)// ["83.00"、 "79.67"、 "93.25"]
学生1の平均:83.00
学生2の平均:79.67
学生3の平均:93.25
オブジェクト配列
配列にはオブジェクトを含めることもでき、配列のメソッドとプロパティは引き続きオブジェクトに適用されます。
function Point(x、y){ this.x = x; this.y = y; } function displayPts(arr){ for(var i = 0; i <arr.length; ++ i){ console.log(arr [i] .x + "、" + arr [i] .y); } } var p1 = new Point(1、2); var p2 = new Point(3、5); var p3 = new Point(2、8); var p4 = new Point(4、4); var points = [p1、p2、p3、p4]; for(var i = 0; i <points.length; ++ i){ console.log( "Point" + parseInt(i + 1)+ ":" + points [i] .x + "、" + points [ i] .y); //ポイント1:1、2
//ポイント2:3、5
//ポイント3:
2、8 //ポイント4:4、4
}
var p5 = new Point(12、-3);
points.push(p5);
console.log( "プッシュ後:");
displayPts(points);
//プッシュ後:
// 1、2
// 3、5
// 2、8 //
4、4
// 12、-3
points.shift();
console.log( "シフト後:");
displayPts(points);
//シフト後:
// 3,5
// 2,8
// 4、4
// 12、-3
push()メソッドを使用してポイント(12、-3)を配列に追加し、shift()メソッドを使用してポイント(1、2)を配列から削除します。
オブジェクト内の配列
オブジェクトでは、配列を使用して複雑なデータを格納できます。この本で説明されているデータの多くはオブジェクトとして実装されており、オブジェクトは配列を使用してデータを格納します。
この例では、観測された毎週の最高気温を保存するオブジェクトを作成しました。オブジェクトには2つのメソッドがあります。1つのメソッドは新しい温度レコードを追加するために使用され、もう1つのメソッドはオブジェクトに格納されている平均温度を計算するために使用されます。コードは次のとおりです。
function weekTemps(){ this.dataStore = []; this.add = add; this.average =平均; }
function add(temp){ this.dataStore.push(temp); }
関数average(){ var total = 0; for(var i = 0; i <this.dataStore.length; ++ i){ 合計+ = this.dataStore [i]; } return total / this.dataStore.length; } var thisWeek = new weekTemps(); thisWeek.add(52); thisWeek.add(55); thisWeek.add(61); thisWeek.add(65); thisWeek.add(55); thisWeek.add(50); thisWeek.add(52); thisWeek.add(49); console.log(thisWeek.average()); //再示54.875