hiromitsuuuuu.log();

to see more to see.

CodeGridのJavaScriptドリルをやってみた。

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);

    }

回答を読んでみて

解いたあとにCodeGridの続きを読んで、正規表現って手があったかーっ!て視野が広がったりした。引き出しの数が少ないなぁ…ってことに気づいて、普段使えなくても新しいメソッド把握しておいたほうがいいなとも思った。Underscoreではfilterをよく使うけど、生のJSで使おうかなってところまでたどり着けなかったのが悔しかった。人によって考え方が様々で、ちっちゃなコードで一問解くだけでも色々学習できて楽しい(*・ω・*)

次のJSドリルが待ち遠しい (*´д`*)