Рефакторинг фильтрации

196
05 февраля 2019, 14:20

Подскажите, как можно отрефакторить такой метод фильтрации:

 filterTasks(tasks) {
switch (this.state.currentFilter) {
  case TaskList.filters.description: {
    const sortedTasks = tasks.sort((a, b) => {
      return a.description > b.description;
    });
    if (this.state.isFilterReverse) {
      return sortedTasks.reverse();
    }
    return sortedTasks;
  }
  case TaskList.filters.status: {
    const sortedTasks = tasks.sort((a, b) => {
      return a.status > b.status;
    });
    if (this.state.isFilterReverse) {
      return sortedTasks.reverse();
    }
    return sortedTasks;
  }
  case TaskList.filters.task: {
    const sortedTasks = tasks.sort((a, b) => {
      return a.name > b.name;
    });
    if (this.state.isFilterReverse) {
      return sortedTasks.reverse();
    }
    return sortedTasks;
  }
  case TaskList.filters.priority: {
    const sortedTasks = tasks.sort((a, b) => {
      return a.priority > b.priority;
    });
    if (this.state.isFilterReverse) {
      return sortedTasks.reverse();
    }
    return sortedTasks;
  }
  default:
    return tasks;
}

}

Answer 1

Передайте в качестве второго параметра field (имя поля по которому нужна сортировка), тогда вам даже switch - case не нужен

filterTasks(tasks, field) {
    const sortedTasks = tasks.sort((a, b) => {
       return a[field] > b[field] ? 1 : -1;
    });
    if (this.state.isFilterReverse) {
       return sortedTasks.reverse();
    }
    return sortedTasks;
}
READ ALSO
Переключение между классами

Переключение между классами

Не могу разобраться, как удалить class="open" у class="options"Когда раскрыт select при клике на другой select, тот который открыт, закрывался, а на который нажали,...

208
js. Проверка на тип данных

js. Проверка на тип данных

Верна ли эта запись? Сам понимаю, что скорее всего нетКак правильно оформить проверку на тип данных на чистом js?

188
Вывод меток по координатам из БД

Вывод меток по координатам из БД

Могу ли я использовать бесплатный АПИ, не нарушая пункт 4 "Условий использования API ЯндексКарт" https://tech

189