【问题标题】:ReactJS: Filter rendering of a list by whole names only?ReactJS:仅按全名过滤列表的呈现?
【发布时间】:2019-04-02 03:12:08
【问题描述】:

我目前正在使用map() 函数呈现从 API 返回的数据列表,如下所示:

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.name 是实际有效的城市名称,我只希望呈现locations

因此,例如,name"Chicago O'Hare" 的位置将是有效的城市名称,应该显示。但是,不应呈现具有 name"Chicago O'Hare A5C" 的位置,因为它的末尾有 A5C,这使其无效。

【问题讨论】:

    标签: arrays reactjs ecmascript-6 filter


    【解决方案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>
          );
       });
    }
    

    希望有帮助

    【讨论】:

    • 不仅是 Chicago O Hare,而且是所有结尾没有任何尾随字符的城市,只是城市名称。芝加哥 O Hare 只是众多城市之一。
    • 没错,只是城市名称,没有后缀或任何尾随字符。这些是我想要呈现给浏览器的唯一内容。
    • 这就是问题所在,我们有一个name 的属性,其值为city,但是在后面有a5c 或q5 的城市的地方存在重复,所有这些都是字符串。所以我认为需要对字符串进行一些解析,以便只给我返回城市名称的值,而在它之后什么都没有。
    • 所以每个城市名称的三个重复项中的第一个城市名称就是我要渲染的。所以我才意识到每个城市的第一个值没有尾随字符。所以我只需要所有城市的三个副本中的第一个。
    • 当我实施您的解决方案时,我的数据完全消失了,没有呈现给浏览器。没有错误信息,你知道,白屏死机。似乎正在发生的事情是 ! 摆脱了这一切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2015-12-11
    • 2017-02-07
    相关资源
    最近更新 更多