Реагировать на проблему собственной сортировки

Я показываю массив (CatFilterPro) в Flatlist, когда нажата кнопка, я хочу отсортировать ее по высокой цене до низкой, а когда нажата другая кнопка, сделайте обратное, приведенный ниже код работает нормально для первого нажатия, но он не мог снова отсортировать его после первой сортировки.

lowpricefilter() {

    this.fc= this.state.recentPro2
    this.fc.sort(function(a, b) {
        return Number(a.pro_price) - Number(b.pro_price);
    })
    this.setState({
        CatFilterPro: this.fc,
        modalVisible: false

    })   
}


highpricefilter() {
    this.fc= this.state.recentPro2
    this.fc.sort(function(a, b) {
        return Number(b.pro_price) - Number(a.pro_price);
    })
    this.setState({
        CatFilterPro: this.fc,
        modalVisible: false
    })   
}
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
272
2

Ответы 2

Вы должны связать свои функции в своем конструкторе

this.highpricefilter = this.highpricefilter.bind(this);
this.lowpricefilter = this.lowpricefilter.bind(this);

Я связал функции, их сортировка прекрасна, в первый раз я нажимаю кнопку, но когда я хочу снова выполнить сортировку, это не так.

othman safadi 09.10.2018 17:42
sortByDescending = (a, b) => {
  if (a === b) return 0;
  if (a > b) return -1;
  return 1;
};

sortByAscending = (a, b) => a - b;

sort = sortFunction => {
  const { recentPro2: fc } = this.state;
  return fc.sort(sortFunction);
}

lowpricefilter = () => {
  const sortedAscending = this.sort(this.sortByAscending));
  this.setState({
    CatFilterPro: sortedAscending,
    modalVisible: false
  });
}

highpricefilter = () => {
  const sortedDescending = this.sort(this.sortByDescending));
  this.setState({
    CatFilterPro: sortedDescending,
    modalVisible: false
  });
}

все же он не выполняет сортировку после того, как было выполнено возрастание или убывание, он просто сортирует для первого нажатия

othman safadi 09.10.2018 17:39

Только что обновил свой ответ, случайно добавил 2 lowpricefilter. Я изменил это сейчас. Если проблема не исчезнет, ​​дайте мне знать.

Dan 09.10.2018 17:49

Я отредактировал и попробовал, я не думаю, что моя проблема в части сортировки, это в рендеринге, я консоль записываю массив, и он довольно отсортирован по asc и des, но он не отображает элементы, отсортированные в плоском списке только для первого вида, который он отображает.

othman safadi 09.10.2018 18:13

Попробуйте добавить extraData = {this.state} в свой FlatList.

Dan 09.10.2018 18:15

Другие вопросы по теме