のび太君には数人の友達がいます。のび太君は新しくできた友達の特徴が知りたいと思いました。けれど、友達の特徴が記載されているのは、生徒名簿だけです。
しかし、生徒名簿には全校生徒900人が記載されています。手作業で調べていては、明日のピクニックには間に合いません。
なので、のび太君は、これを解決するためにJavaScript
を作って、スクリプトを書くことにしました。
<!-- のび太君のデータ -->
const nobitaData = {
'friends': [
'スネ夫',
'ドラえもん',
'ジャイアン'
]
};
<!-- 生徒名簿 -->
const studentList =
[
{
'trait': '金持ち',
'name': 'スネ夫'
}
,
{
'trait': '猫型ロボット',
'name': 'ドラえもん'
}
,
{
'trait': 'ガキ大将',
'name': 'ジャイアン'
}
,
{
'trait': 'マドンナ',
'name': 'しずかちゃん'
}
,
{
'trait': '勉強できる',
'name': '出木杉くん'
},
{
'trait': 'よくある名字',
'name': '田中くん'
},
{
'trait': 'ジャイアンの妹',
'name': 'ジャイ子'
}
];
ちょっと、ふざけた感じに書きましたが、実際のプログラムでもありありな条件だと思います。
さぁ、どうしますか?
まず、filterメソッドが使えそうですね。
たた、filter
だけだとすべての友達を調べるのは無理ですよね。空の配列を用意して、For Loopで回して、さっき作った空の配列にpushしたらなんとかできそうな気がしますね。
とういうことで、こんなんでどうでしょう。
const nobitaNoFriends = nobitaData.friends;
let friendInClass = [];
for (let i = 0; i < nobitaNoFriends.length; i++) {
studentList.filter(function (human) {
if (human.name === nobitaNoFriends[i]) {
friendInClass.push(human);
}
});
}
console.log(friendInClass);
できました。
[
{ trait: '金持ち', name: 'スネ夫' },
{ trait: '猫型ロボット', name: 'ドラえもん' },
{ trait: 'ガキ大将', name: 'ジャイアン' }
]