@syndarva

Какой можно придумать простой и изящный алгоритм фильтрации данных?

У меня есть:
  • Объекты следующего вида:
    [{x: "100", y: "40", z: "first"}, {x: "120", y: "10", z: "second"}, ...]

  • Двойные слайдеры для выбора диапазона для x и y
  • Три кнопки: first, second, third. По сути, это поле тегов


По нажатию на кнопку "Применить", функция формирует объект фильтра следующего вида:
{x: {max: "100", min: "20"}, y: {max: "100", min: "20"}, z: ["first", "second"]}

(z - массив выбранных тегов, под которые должен попадать фильтруемый объект)
Какой алгоритм подойдет для этого лучше всего?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
hzzzzl
@hzzzzl
в любом случае придется пройти по всему массиву, и каждый элемент сравнить, то есть алгоритмы не нужны, хватит встроенных функций JS

data = [
  {x: "100", y: "40", z: "first"}, {x: "120", y: "10", z: "second"}, 
  {x: "0", y: "100", z: "second"}, {x: "300", y: "150", z: "third"}
]

filter = {x: {max: "100", min: "20"}, y: {max: "100", min: "20"}, z: ["first", "second"]}

isBetween = (num, bounds) => +num >= +bounds.min && +num <= +bounds.max

data.filter(obj => isBetween(obj.x, filter.x) && isBetween(obj.y, filter.y) && filter.z.includes(obj.z))
// 0: {x: "100", y: "40", z: "first"}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы