#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. Когда я внедрил ваше решение, мои данные полностью исчезли, не отображаясь в браузере. Нет сообщения об ошибке, вы знаете, белый экран смерти. Похоже, что происходит то, что
!
, избавляется от всего этого.