ReactJS: фильтровать отображение списка только по целым именам?

#arrays #reactjs #ecmascript-6 #filter

#массивы #reactjs #ecmascript-6 #Фильтр

Вопрос:

В настоящее время я визуализирую список данных, возвращаемых из API, используя map() функцию следующим образом:

 renderLocation() {
    return this.props.locations.map(location => {
      return (
        <div key={location.id}>
          <div className="location">
            <h1>
              {location.name}
              {location.airport_code}
            </h1>
            <div className="location-secondary-info">
              <span>
                <i className="material-icons">airplanemode_active</i>
                {location.description}
              </span>
            </div>
          </div>
        </div>
      );
    });
  }
  

Теперь я хочу отфильтровать отображение, чтобы отображались только те, locations которые имеют правильное name значение поля. Мои данные API выглядят следующим образом:

введите описание изображения здесь

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

Так, например, местоположение с name of "Chicago O'Hare" было бы допустимым названием города и должно отображаться. Однако местоположение с name of "Chicago O'Hare A5C" не следует отображать, поскольку в конце у него есть A5C , что делает его недействительным.

Ответ №1:

Одним из подходов может быть использование регулярного выражения для фильтрации местоположений на основе наличия буквенно-цифрового суффикса подстроки в name поле местоположения с помощью следующего:

 const filteredLocations = this.props.locations.filter(location => {
    return !location.name.match(/[A-Z0-9] $/)
});
  

Приведенная выше логика в основном гласит:

«фильтровать все местоположения, в конце названия местоположения нет буквенно-цифрового слова».

Интеграция этого в вашу renderLocation() функцию может быть достигнута с помощью:

 renderLocation() {

    /* Filter locations with name that doesn't have alphanumeric suffix word   */
    const filteredLocations = this.props.locations.filter(location => {
        return !location.name.match(/[A-Z0-9] $/)
    });

    /* Render only the filtered location with name Chicago O'Hare */ 
    return filteredLocations.map(location => {
      return (
        <div key={location.id}>
          <div className="location">
            <h1>
              {location.name}
              {location.airport_code}
            </h1>
            <div className="location-secondary-info">
              <span>
                <i className="material-icons">airplanemode_active</i>
                {location.description}
              </span>
            </div>
          </div>
        </div>
      );
   });
}
  

Надеюсь, это поможет

Комментарии:

1. Это не только Чикаго, О Хэйр, но и все города, в конце которых нет завершающих символов, только название города. Чикаго О’Хэйр — всего лишь один из множества городов.

2. Точно, только название города, без суффикса или каких-либо завершающих символов после. Это единственные, которые я хочу отобразить в браузере.

3. Вот в чем вопрос, у нас есть свойство name , значение которого равно city, но затем есть дубликаты, где есть город с этим a5c или q5 после него, все в виде строки. Итак, я думаю, что должен быть некоторый синтаксический анализ строки, чтобы возвращать мне значения только с названием города и ничего после него.

4. Итак, я хочу отобразить первое название города из трех дубликатов для каждого названия города. Итак, я только что понял, что первое значение каждого города не имеет завершающих символов. итак, мне просто нужен первый из трех дубликатов для всех городов.

5. Когда я внедрил ваше решение, мои данные полностью исчезли, не отображаясь в браузере. Нет сообщения об ошибке, вы знаете, белый экран смерти. Похоже, что происходит то, что ! , избавляется от всего этого.