JS勉強記③配列
配列
値に順序を付けて格納する。格納した値のことを「要素」、要素の順番(位置)を「index」と呼ぶ。
var colors = ['Red', 'Green', 'Blue'];
console.log(colors[1]);
この場合、要素は「'Red'」「 'Green'」「 'Blue'」を指す。各要素のindexは前から「0」「1」「2」となる。要素が「3」ある場合は、indexの最大値は「2」となる。
コンソールに出力されるのは、↑の場合は2番目の要素「'Green'」となる。
連想配列
連想配列はindexを数字ではなく任意の文字列で表現する。
var user = {name:'山田花子', gender:'女性', birth:'1990/01/01'};
console.log(user.name);
console.log(user.gender);
console.log(user.birth);
この場合indexは「name」「gender」「birth」に当たる。各要素をコンソールに出力する場合は、object(=user)とindexを指定する。
MEMO:存在しないindexを指定したら
配列、連想配列に共通するが、存在しないindex(↑の場合例えば「3」や「address」など)を指定すると、「undefined(=定義されていない)」が返される。
演習
問題:テストの点数の、合計値、平均値を求める。集計する各点数は、100, 90, 80, 70 ,60 とする。(配列の長さ=indexの最大値には「.length」プロパティを使う)
【自分でググりながら書いたコード】
var scores = [100, 90, 80, 70 ,60];
var sum = 0;
for (var i = 0; i <= scores.length; i++) {
sum += scores[i];
}
var average = sum / scores.length;
console.log(sum);
console.log(average);
結果:コンソールにはNaN(Not a Number、非数)が出力された。
【正解】
var scores = [100, 90, 80, 70 ,60];
var sum = 0;
for (var i = 0; i < scores.length; i++) {
sum += scores[i];
}
var average = sum / scores.length;
console.log('合計値:' + sum);
console.log('平均値:' + average);
scores、sumの宣言はOK。配列の長さもscores.lengthで求められている。
が、変数iの条件を「5以下」で設定してしまったので、i=5の際にundefinedをそのままsumに加算代入してしまい、その結果NaNとなった。初歩的な間違いでした。正しくは、i < 5ですね。
indexは0からスタートして振られるので、配列の長さ=indexの最大値は「要素の個数-1」となる。凡ミスで悔しい・・・