###前提・実現したいこと
連想配列をキーでグループ化したいです。
http://qiita.com/suin/items/c524cf84368332db426b
上記サイトの実装案1が気に入りました。
しかしPHPでのやり方は載っていたのですが、javascriptのやり方がわかりません。
お力添えよろしくお願いいたします。
###発生している問題・エラーメッセージ
jquery-3.2.1.js:3869 Uncaught SyntaxError: Unexpected token ;
###該当のソースコード
<script src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"></script> <script type="text/javascript"> $(function(){ /** 連想配列を文字列に整形してコンソールに表示 * @method console.hash * @param {hash} obj 処理対象のオブジェクト * @method format 連想配列を文字列に整形 * @property {number} length オブジェクト全体の数 * @property {number} count 整形処理をの終わったオブジェクト数 * @property {string} outText コンソールに書き出すテキスト */ console.hash = function(obj) { this.length = Object.keys(obj).length; this.count = 0; this.outText = "{\n"; /** * @param {hash} obj 処理対象のオブジェクト * @param {number} times 処理中オブジェクトの階層 */ this.format = function(obj,times){ var i = 0; var _objlength = Object.keys(obj).length; for(key in obj){ i++; //階層分のタブを追加 var tabs = ""; for(var j = 0; j < times+1; j++){ tabs += "\t"; } this.outText += tabs + key + ":"; if(typeof obj[key] == "object"){ this.outText += "{" + "\n"; //下層のオブジェクト数を足す this.length += Object.keys(obj[key]).length; //再帰処理 this.format(obj[key],times+1); if(i == _objlength){ this.outText += tabs.replace(/(\t?).$/,'$1') + "}\n"; } this.count++; }else{ this.outText += obj[key]; if(i != _objlength){ this.outText += ",\n"; }else{ this.outText += "\n" + tabs.replace(/(\t?).$/,'$1') + "}\n"; } this.count++; } } if(this.length == this.count){ console.log(this.outText); } } this.format(obj,0); } function array_key_exists ( key, search ) { // http://kevin.vanzonneveld.net // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: Felix Geisendoerfer (http://www.debuggable.com/felix) // * example 1: array_key_exists('kevin', {'kevin': 'van Zonneveld'}); // * returns 1: true // input sanitation if( !search || (search.constructor !== Array && search.constructor !== Object) ){ return false; } return key in search; } var $foods = [ {'name':'Apple', 'category':'fruits'}, {'name':'Strawberry', 'category':'fruits'}, {'name':'Tomato', 'category':'vegetables'}, {'name':'Carot', 'category':'vegetables'}, {'name':'water', 'category':'drink'}, {'name':'beer', 'category':'drink'}, ]; function array_group_by($items, $keyName, $after){ var $groups = ['']; for(var $item in $items){ var $key = $item[$keyName]; if (array_key_exists($key, $groups)) { $groups[$key][''] = $item; } else { $groups[$key] = [$item]; } } eval($after + '=' + $groups + ';'); } array_group_by($foods, 'category', '$foods2'); console.hash($foods); console.hash($foods2); }); </script>
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー