JavaScriptで配列データの検索機能実装を行おうとしております。
この配列は、多重連想配列になっており、1次元目のカラムと2次元目のカラム双方が一致する場合のデータを抽出するものになります。
この、2次元目の検索を行うデータの数が可変になります。
一旦動く処理にはしたのですが、filterしたのち、多重ループという有様でして・・・。
こちら、もう少し簡略化とかできないものなのでしょうか?
コード
JavaScript
1//item_listからname先頭文字がsearch_name、かつcategoryのいずれかの情報に合致するものを抽出する. 2function searchBunk_agent(item_list,category,search_name) { 3 var item_result = []; 4 var category_list = category.split(","); 5 var search_name_Result = item_list.filter(function(value){ 6 return value.name.indexOf(search_name,0) == 0; 7 }); 8 for(var i = 0; i < search_name_Result.length; i++){ 9 var val = search_name_Result[i]; 10 for(var j = 0; j < category_list.length; j++){ 11 if(val['category'] == category_list[j]){ 12 item_result.push('名前:' + val['name'] + 'カテゴリ:' + val['name']); 13 break; 14 } 15 } 16 } 17}
item_list = [ {"name":"みかん", "category":"00"}, {"name":"みしん", "category":"01"}, {"name":"みどり", "category":"02"} ];
期待値
パターン1 search_name:"み" category:"00" 結果:”みかん”の要素情報がitem_resultにpushされる パターン2 search_name:"み" category:"00,02" 結果:”みかん”と"みどり"の2つの要素情報がitem_resultにpushされる
filter1つのみで検索は完了。その後検索結果でループして、そこではpush実行のみ。
という処理にできれば、作るコード上は検索を何度もするものではなくなり、
見やすくなるのだろうか?と思っていたりします。
ただ、categoryが可変(OR条件が可変)になることへの対策方法が出てこず・・・。
私の方で挙げたコードが妥当な作りでは?や、上記のfilterでcategory可変対応をしても似たような処理をfilterに入れ込むだけだから大して変わらない、などももしありましたら、情報頂ければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 14:33
2020/07/01 05:39