Dropdown Filters и сложные условные выражения - PullRequest
0 голосов
/ 23 января 2019

Мне интересно, каков самый чистый способ достижения следующего:

У меня есть несколько выпадающих меню, которые я использую для фильтрации массива.

<select class="fselect">
  <option value="All A types">All A types</option>
  <option value="A1">A1</option>
  <option value="A2">A2</option>
</select>
<select class="fselect">
  <option value="All B types">All B types</option>
  <option value="B1">B1</option>
  <option value="B2">B2</option>
</select>
<select class="fselect">
  <option value="All C types">All C types</option>
  <option value="C1">C1</option>
  <option value="C2">C2</option>
</select>
<select class="fselect">
  <option value="All D types">All D types</option>
  <option value="D1">D1</option>
  <option value="D2">D2</option>
</select>

Фильтры И ИЛИ. Таким образом, пользователь может искать только A1 или D2, или он может искать A2 и B1, или все типы C & D2 или A2, B2, C1 и D2 и т. Д. Таким образом, число возможных комбинаций увеличивается.

Я надеюсь, что есть способ сделать это без написания очень сложного оператора if else или switch, поскольку потенциально может быть до 8 различных раскрывающихся списков. Я использую библиотеки jQuery и D3 v3.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 23 января 2019

Не уверен, по каким фактическим критериям вы проверяете (например, строка, содержащая эти значения, массив содержит объекты со значениями, такими как c:1, массив содержит массивы строк ['C1','A1','A2'] и т. Д.).

Возможный способ получить требование фильтра.

var filters = []

//Monitor all dropdowns for a change
$('.fselect').change(funciton(e){
 //On change, check all of them for current state
 $('.fselect').each(function(){ // not sure if we can use $(this) ?
  $(this).val() && filters.push($(this).val()) // If you include an 'empty' value for a non-used filter then don't add to array
 })
 // filters = ['A1','All C types']
})
...