10. 配列(2)

(1)
次の5人の名前と点数をオブジェクトに格納してください。
添字は名前とし、上から順番に格納してください。
・ Aさん 65点
・ Bさん 95点
・ Cさん 70点
・ Dさん 30点
・ Eさん 59点

var ScoreTable = {"A":65, "B":95, "C":70, "D":30, "E":59};

ここは特に問題なし。

配列・連想配列は宣言の方法が複数ありそれぞれ囲いの括弧が異なることがあるため気をつけたい。

 


(2)
作成した連想配列をつかって
最高点と最低点の人の名前を出力してください。

for in を使ってそれぞれ要素を取り出し比較していく。

暫定のトップはAさんにしておく。

var TopScore = "A";
var BottomScore = "A";
for (name in ScoreTable){
    if (ScoreTable[TopScore] < ScoreTable[name]){
        TopScore = name;
    } else if (ScoreTable[BottomScore] > ScoreTable[name]){
        BottomScore = name;
    }
}
document.writeln("最高点の人は" + TopScore + "さんで" + ScoreTable[TopScore] + "点です。");
document.writeln("最低点の人は" + BottomScore + "さんで" + ScoreTable[BottomScore] + "点です。");

 ScoreTable.A と書くと要素の値である 65 を得られたが、ScoreTable.name や ScoreTable.TopScore という形では要素を得ることは出来なかった。

document.write で書き出すと undefined と表示された。

変数はオブジェクトでありあくまでオブジェクトの代用としてしか使えないということなのか。

 


(3)
作成した連想配列をつかって
点数の高い順に名前を並べた配列を作成してください。

新たに配列を宣言しまずは最高得点の人を入れておく。

(2)と同様に比較、かつ最後に配列に入れた人より点数の低い人のみを抽出した。

var SortName = [TopScore];
for (var i = 1; i <= 4; i++){
    TopScore = BottomScore;
    for (name in ScoreTable){
        if ( (ScoreTable[TopScore] < ScoreTable[name]) &&

        (ScoreTable[SortName[(SortName.length - 1)]] > ScoreTable[name]) ){
            TopScore = name;
        }
    }
    SortName.push(TopScore);
}

TopScore は比較前に最も点数の低い人で初期化している。

 

 

(4)
上記の問題で、全員の平均点を求めてください。

for in を使っても良いのだがせっかくなので(3)で作った配列を活用してみる。

配列に入ってる人の得点を順番に加算してその人数で割った。

var AverageScore = 0;
for (var i = 0; i < (SortName.length); i++){
    AverageScore += ScoreTable[SortName[i]];
}
AverageScore /= SortName.length;
document.write("平均点は" + AverageScore + "点です。");

 

下記は全体

 

var ScoreTable = {"A":65, "B":95, "C":70, "D":30, "E":59};

 

var TopScore = "A";
var BottomScore = "A";
for (name in ScoreTable){
    if (ScoreTable[TopScore] < ScoreTable[name]){
        TopScore = name;
    } else if (ScoreTable[BottomScore] > ScoreTable[name]){
        BottomScore = name;
    }
}
document.writeln("最高点の人は" + TopScore + "さんで" + ScoreTable[TopScore] + "点です。");
document.writeln("最低点の人は" + BottomScore + "さんで" + ScoreTable[BottomScore] + "点です。");

 

var SortName = [TopScore];
for (var i = 1; i <= 4; i++){
    TopScore = BottomScore;
    for (name in ScoreTable){
        if ( (ScoreTable[TopScore] < ScoreTable[name]) &&

        (ScoreTable[SortName[(SortName.length - 1)]] > ScoreTable[name]) ){
            TopScore = name;
        }
    }
    SortName.push(TopScore);
}

 

var AverageScore = 0;
for (var i = 0; i < (SortName.length); i++){
    AverageScore += ScoreTable[SortName[i]];
}
AverageScore /= SortName.length;
document.write("平均点は" + AverageScore + "点です。");