У меня есть класс, в котором есть два метода handleChange(e) и cardClick(e), и я хочу отсортировать массив объектов для обеих функций. Мой код:

handleChange(e){
arr.sort(compare);
            function compare(a, b){
                if(a.population === 'unknown')
                    return 1;
                if(b.population === 'unknown')
                    return -1;
                if(parseInt(a.population) < parseInt(b.population))
                    return 1;
                else if(parseInt(a.population) > parseInt(b.population))
                    return -1;
                else
                    return 0;
            }
}

А также

cardClick(e){
arr.sort(compare);
            function compare(a, b){
                if(a.population === 'unknown')
                    return 1;
                if(b.population === 'unknown')
                    return -1;
                if(parseInt(a.population) < parseInt(b.population))
                    return 1;
                else if(parseInt(a.population) > parseInt(b.population))
                    return -1;
                else
                    return 0;
            }
}

Мне нужно написать определение функции сравнения как в handleChange, так и в cardClick. Есть ли у них способ, чтобы мне не приходилось писать его дважды, и я могу использовать его в обеих функциях.

1
rajatgalav 21 Ноя 2018 в 11:31

1 ответ

Лучший ответ

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

Пример

function compare(a, b) {
  if (a.population === "unknown") return 1;
  if (b.population === "unknown") return -1;
  if (parseInt(a.population) < parseInt(b.population)) return 1;
  else if (parseInt(a.population) > parseInt(b.population)) return -1;
  else return 0;
}

class App extends React.Component {
  handleChange = e => {
    arr.sort(compare);
    // ...
  };

  cardClick = e => {
    arr.sort(compare);
    // ...
  };

  render() {
    // ...
  }
}
1
Tholle 21 Ноя 2018 в 08:33