質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2232閲覧

連想配列をキーでグループ化する

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/07/27 05:09

編集2017/07/27 05:19

###前提・実現したいこと
連想配列をキーでグループ化したいです。
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/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/07/27 05:11 編集

ロジック的には似たような形になるはずなので、まずはその実装案1を参考に作ってみては。
m.ts10806

2017/07/27 05:32

エラー内容はロジック以前の問題のような気がしますが・・・
guest

回答1

0

ベストアンサー

どの部分を実装すればいいのかよくわかりませんが
こんな感じでしょうか?

javascript

1var foods = [ 2 {'name':'Apple', 'category':'fruits'}, 3 {'name':'Strawberry', 'category':'fruits'}, 4 {'name':'Tomato', 'category':'vegetables'}, 5 {'name':'Carot', 'category':'vegetables'}, 6 {'name':'water', 'category':'drink'}, 7 {'name':'beer', 'category':'drink'}, 8]; 9var expected = {}; 10foods.map(function (i,j) { 11 var cat=i["category"]; 12 if(typeof expected[cat]=="undefined") expected[cat]=[]; 13 expected[cat].push(i); 14}); 15console.log(expected); 16

投稿2017/07/27 05:36

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/27 06:41

ご回答ありがとうございます。実現できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問