神戸プログラミングアカデミーのブログ

「未経験から」「スキルアップ」「起業を目指す」無料で学べる神戸のプログラミング学校&学習コミュニティ

Userデータを集計する

https://github.com/prog-ac/sortable-table/blob/master/assets/users.json

準備

curl https://raw.githubusercontent.com/prog-ac/sortable-table/master/assets/users.json > users.json

jsonの読み込み

const users = require("./users.json")

1. スコア降順でソートして、90点以上の人のみを表示せよ。(この問題はfor文なしで)

[
  { name: 'ヤマモト ミカコ', pref: '愛知県', birthday: '1995-05-14', score: 100 },
  { name: 'エコダ リョウスケ', pref: '石川県', birthday: '1958-11-19', score: 99 },
  { name: 'ナギサ タクマ', pref: '山梨県', birthday: '1950-04-25', score: 98 },
  { name: 'ヤマモト アケミ', pref: '石川県', birthday: '1996-09-15', score: 98 },
  { name: 'ワタナベ マイ', pref: '埼玉県', birthday: '1968-09-02', score: 97 },
  { name: 'サイトウ マアヤ', pref: '茨城県', birthday: '1981-07-26', score: 97 },
  { name: 'ヨシモト ハルカ', pref: '長野県', birthday: '1978-04-03', score: 97 },
  { name: 'ヤマダ ヨウイチ', pref: '茨城県', birthday: '1956-01-22', score: 97 },
  { name: 'アオタ ナオコ', pref: '和歌山県', birthday: '1990-03-28', score: 96 },
  { name: 'イシダ タクマ', pref: '青森県', birthday: '1986-03-14', score: 95 },
  { name: 'タナカ ヨウコ', pref: '山口県', birthday: '1966-05-22', score: 95 },
  { name: 'ムラヤマ ナオト', pref: '東京都', birthday: '1957-01-31', score: 94 },
  { name: 'ウノ ジュン', pref: '長野県', birthday: '1940-12-02', score: 94 },
  { name: 'ナカムラ ミカコ', pref: '新潟県', birthday: '1941-04-25', score: 93 },
  { name: 'ナギサ アキラ', pref: '高知県', birthday: '1955-04-10', score: 93 },
  { name: 'コンドウ ハルカ', pref: '大分県', birthday: '1947-11-08', score: 93 },
  { name: 'キムラ ナオキ', pref: '広島県', birthday: '1956-09-08', score: 91 },
  { name: 'サカモト ヤスヒロ', pref: '三重県', birthday: '1948-02-15', score: 91 },
  { name: 'キジマ ヒロシ', pref: '山形県', birthday: '1956-11-09', score: 91 },
  { name: 'スギヤマ ナオコ', pref: '三重県', birthday: '1970-04-28', score: 91 }
]

解答例

const users = require("./users.json")
const filterdUser = users.filter((user) => user.score >= 90)
console.log(filterdUser.sort((a, b) => b.score - a.score))

2. 名前(ファーストネーム)の重複している人数を集計し、人数降順でソートして表示せよ。

ユミコ:12人
ミキ:9人
ハルカ:8人
ナナミ:8人
マイ:8人
サユリ:7人
ナオキ:7人
モモコ:7人
アケミ:6人
ヨウコ:6人
ミノル:6人
マアヤ:6人
シュウヘイ:5人
トモヤ:5人
アキラ:5人
ジュン:5人
ユウキ:5人
タクマ:5人
クミコ:4人
チヨ:4人
ミカコ:4人
ヤスヒロ:4人
ヨウイチ:4人
リョウスケ:4人
カナ:4人
ナオコ:4人
ハナコ:4人
ヒデキ:4人
アスカ:3人
ナオト:3人
カズヤ:3人
ユイ:3人
ショウタ:3人
カオリ:3人
レイ:3人
マナブ:2人
ソウタロウ:2人
リョウヘイ:2人
ヨウスケ:2人
キョウスケ:2人
ヒロシ:2人
ユウタ:2人
アツシ:1人
サトミ:1人
タロウ:1人
ツバサ:1人
リカ:1人

解答例

const users = require("./users.json")

const result = []
for (let i = 0; i < users.length; i++) {
  const user = users[i]
  const firstName = user.name.split(" ")[1]
  let index = result.findIndex((r) => r.firstName === firstName)
  if (index < 0) {
    result.push({
      firstName: firstName,
      count: 1
    })
  } else {
    result[index].count++;
  }
}
result.sort((a, b) => b.count - a.count)
for (r of result) {
  console.log(`${r.firstName}:${r.count}`)
}