CodeGridで始まったJavaScriptドリルが楽しそうなのでやってみた!
JavaScriptドリル - JSON文字列を扱う
まずは回答してみた
JSON文字列から特定の情報を取り出す問題。記事を先に読み進めちゃうとパターンを学んじゃってつまんなくなっちゃうから、我慢してまずは自分で解いてみた。
var data = '[{"id":1,"name":"中村 享介"},{"id":2,"name":"高津戸 壮"},{"id":3,"name":"小山田 晃浩"},{"id":4,"name":"外村 和仁"},{"id":5,"name":"外村 奈津子"},{"id":6,"name":"德田 和規"},{"id":7,"name":"山田 順久"},{"id":8,"name":"小原 司"},{"id":9,"name":"山田 敬美"},{"id":10,"name":"坂巻 翔大郎"},{"id":11,"name":"中島 直博"}]'; function staff(id){ var target = null; JSON.parse(data).forEach(function(mem){ if(id === mem.id){ target = mem.name; } }); console.log(target); } staff(1); staff(5); staff(99);
idは一意って認識あるけど、複数ある可能性はないのかしらとか別なこと考えてしまった\(^o^)/ この回答だと複数あると上書きされちゃうからtargetを配列にしてtoString()するやつも別に書いた。
forEachよりforのほうがいいかも
twitterに投稿したら「あるとしたら発見してもループが止まらないくらいですね! 」とコメントをもらう。ちょうど投稿するときに、結果が1つだと決まっているなら目的のものが見つかったらすぐにループ抜けたほうがいいなぁともんやりしてた。でもforEachだとループを抜けられないからこの場合はforのほうがいいらしい。確かに、jQueryのeach止めるときはfalse返してた...!
JavaScriptのforEach的なものでbreakしたい話
Array.forEach - JavaScript
forで書き直す
for以外で書こうと思って解答したのだけど「for書くのも面倒かもしれないけどソッチのほうが早い時もある」って聞いて、もうちょと深く考えたほうがいいなと思うなど。どの実装にも理由がある(´・ω・`)
function staff1(id){ var mems = JSON.parse(data); var target = null; for(var i = 0; i<mems.length; i++){ if(id === mems[i].id){ target = mems[i].name; break; } } console.log(target); }