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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

Q&A

2回答

7446閲覧

jsで同じキーの異なる値を取り出したい

MeB

総合スコア104

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

0グッド

2クリップ

投稿2018/07/12 11:10

編集2018/07/13 00:18

前提・実現したいこと

タイトルの通り
underscore.jsの_.where()で同じキーの異なる値を取り出したいです。

発生している問題・エラーメッセージ

jsonファイルから以下のようなデータを持って来ていて

{ "test":[ { "id": 1, "type":"aaa", "color":"red" }, { "id": 2, "type":"aaa", "color":"red" }, { "id": 3, "type":"bbb", "color":"red" }, { "id": 4, "type":"bbb", "color":"blue" }, { "id": 5, "type":"bbb", "color":"blue" } ] }

下記コードの

var results = _.where(dataArray, query);

を通す際にqueryに
"type":"aaa" が来た場合は

{"id": 1,"type":"aaa","color":"red"},
{"id": 2,"type":"aaa","color":"red"},

が取れる。

"color":"red"と"color":"blue"が来た場合、

{"id": 1,"type":"aaa","color":"red"},
{"id": 2,"type":"aaa","color":"red"},
{"id": 3,"type":"bbb","color":"red"},
{"id": 4,"type":"bbb","color":"blue"},
{"id": 4,"type":"bbb","color":"blue"}

が取れる。
上記のような感じでどれか一つでも当てはまって入れば該当データの全要素を取得するようにしたいのですが、

"color":"red"と"color":"blue"のように同じキーで異なる値が来た場合だと
"color":"red"(idでいうと1,2,3)のデータしか取得できません。

どうしても最初の一つしか取れず困っております。

js

1// dataArrayにはjsonファイルの中身が入っています 2var results = _.where(dataArray, query); 3 4// 検索結果の出力処理 5 function outputResults(results){ 6 // 変数の初期化 7 var html = ''; 8 9 // 受け取った配列をループで処理 10 // 出力するHTMLの整形 11 jQuery.each(results, function() { 12 html += '<div>'; 13 html += this.id; 14 html += this.name; 15 html += '</div>'; 16 }); 17 18 // HTMLに出力 19 $('#items').empty().append(html); 20 } 21 22 // ページ読み込み時はすべてのアイテムを出力する 23 $(window).on('load', function(){ 24 outputResults(dataArray); 25 }); 26 console.log('成功'); 27 }, 28 error: function(){ 29 console.log('失敗'); 30 } 31 })

試したこと

js

1var results = _.where(dataArray, {type:"aaa,bbb"}); 2var results = _.where(dataArray, {type:"aaa","bbb"}); 3var results = _.where(dataArray, {type:"aaa"},{type:"bbb"});

など試しましたがエラーなどで何も表示されないか最初に来たキーの値の分しか取れませんでした

ご教示を宜しくお願いします。

追記
underscore.jsを使用していますが、
使わないでこうした方が簡単だぞ。というものがあればご教示をお願いします。
js自体あまり使用したことがないため頼ろうとしたのが使用の理由です。(結局つまずいていますが…)
厚がましいですが回答依頼させていただきました。よろしくお願いします。

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

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

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

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

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

guest

回答2

0

query = [{"color":"red"}, {"color":"blue"}]; result = []; query.forEach((el) => { result.push(_.where(dataArray, el)); });

ループを使うのではだめでしょうか?

投稿2018/07/12 13:40

sh1bainu

総合スコア16

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

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

MeB

2018/07/12 23:58

回答ありがとうございます。 試してみます。
guest

0

"name":"eee"、"name":"aaa"など同じキーで異なる値が来た場合でも該当のデータを取り出したいです。

name という key をもつオブジェクトを取り出したいということでしょうか?

test = [ { name: 'aaa' }, { name: 'bbb' }, { name: 'ccc' }, { id: 1 }, { id: 2 } ];

たとえば↑のような配列があった場合、

ret = test.filter(el => el.hasOwnProperty('name')); console.log(ret); [ { name: 'aaa' }, { name: 'bbb' }, { name: 'ccc' } ]

underscore.jsではないですが、Array がもつ fileter() 関数を使えば、渡した callback 関数が真を返すオブジェクトだけ抽出できます。

どうでしょうか。

投稿2018/07/12 12:52

sh1bainu

総合スコア16

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

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

MeB

2018/07/12 13:19

ご回答ありがとうございます。 すみません。質問の内容がわかりにくかったため編集いたしました。 また、underscore.jsにこだわっているわけではなく、jsをあまりさわったことがないため 利用しているだけですので問題ありません。よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問