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」となる。凡ミスで悔しい・・・

この記事が気に入ったらサポートをしてみませんか?