月曜からカタコリ

ハッカーにも画家にもなれない

JSON.stringifyの実装

会社の課題でJSON.stringifyの実装というものがありました。

再帰関数を使って書いてみました。

function stringify(obj){
  if ( typeof obj == 'string' ) {
  
      var a = obj.replace("\\", "\\\\")
                 .replace("\n", "\\n")
                 .replace("\r", "\\r")
                 .replace("\t", "\\t");
      return '"' + a + '"';

  } else if ( obj instanceof Object && !(obj instanceof Array) ){

      var tmp = "", keys = Object.keys(obj);
      for (var i=0; i<keys.length; i++){
      	tmp += '"' + keys[i] + '"' + ":"  + stringify(obj[keys[i]])  + ",";
      }
      tmp = tmp.substr( 0, tmp.length-1 ) ;
      return "{" + tmp + "}";

  } else if ( Array.isArray(obj) ){

      var str, tmp = [];
      for ( var i=0; i<obj.length; i++){
        tmp.push(stringify(obj[i]));
      }
      str = "[" + tmp.join(",") + "]";
      return str;

  } else {
  
      return obj += "";
      
  }
}

んーーー結構すっきり書けたと思うけど、
もうちょいリファクタリングできるかな…?
あと変数名がセンスない!
もう一回リーダブルコード読み直そうかな…!
hattys2.hatenablog.com