前提・実現したいこと
タイトルの通り
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自体あまり使用したことがないため頼ろうとしたのが使用の理由です。(結局つまずいていますが…)
厚がましいですが回答依頼させていただきました。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/12 23:58