JavaScript
1var people=new Array(5);
2people[0]="山田"
3people[1]="高橋"
4people[2]="田中"
5people[3]="鈴木"
6people[4]="吉田"
得点はどこ!?!?!?
下記のようにオブジェクトの配列を作ってください。
JavaScript
1var students = [
2 {name: "山田", points: 80},
3 {name: "高橋", points: 75},
4 {name: "田中", points: 85},
5 {name: "鈴木", points: 100},
6 {name: "吉田", points: 65}
7];
お小言を言っておくと、peopleは単数形なので1人の人を指します。
複数形にしてください、得点という単語からより正しくはstudents
では?
maxは名前を使うので人そのものを入れた方が良いでしょう。
5というリテラルな数値は使っては駄目です。array.length
を利用してください。
"平均値は"+sum/5+"点です"
に関しては/
の結合が優先度が高いので動作しそうですが、
数値計算の場合は変な動きをすることがあります。
ここは明示的に括弧で括って"平均値は"+(sum/5)+"点です"
と記載した方が分かりやすいです。
下記を反映してリファクタリングかけるとこうなりました。
JavaScript
1var students = [
2 {name: "山田", points: 80},
3 {name: "高橋", points: 75},
4 {name: "田中", points: 85},
5 {name: "鈴木", points: 100},
6 {name: "吉田", points: 65}
7];
8var sum = 0;
9var max = {name: "", points: 0};
10for (var i = 0; i < students.length; i++) {
11 var student = students[i];
12 sum += student.points;
13 if (max.points < student.points) {
14 max = student;
15 }
16}
17// 平均
18console.log("平均値は" + (sum / students.length) + "点です");
19// 最大値
20console.log("最高得点は" + max.points + "点で" + max.name + "さんです");
【おまけ】 Lodashによるスタイリッシュな解決法
Lodashというライブラリはこういったオブジェクトの配列を計算するのが超得意です。
平均得点も最高得点もたったの1行です。
この為にオブジェクトの配列にしろと言ったといっても過言ではありません。
下記のコードをhttps://codepen.io/travist/full/jrBjBz/に貼り付けて結果を確認してみてください
JavaScript
1var students = [
2 {name: "山田", points: 80},
3 {name: "高橋", points: 75},
4 {name: "田中", points: 85},
5 {name: "鈴木", points: 100},
6 {name: "吉田", points: 65}
7];
8var avg = _.meanBy(students, function(it){ return it.points });
9var max = _.maxBy(students, function(it){ return it.points });
10
11result = {avg: avg, max: max};
JSON
1{
2 "avg": 81,
3 "max": {
4 "name": "鈴木",
5 "points": 100
6 }
7}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/08 03:44