【问题标题】:How to select multiple properties from object in React如何从 React 中的对象中选择多个属性
【发布时间】:2021-09-06 02:25:44
【问题描述】:

我正在 React 中构建一个搜索栏,用于搜索“SlideData”。 我正在使用对象的“text1”属性进行过滤。 最好解析属性(标题,文本1,文本2,文本3)中的所有文本。 我将如何搜索每个属性中的所有字符串?

除此之外,如果搜索的单词被突出显示会很好,但我知道那是额外的工作。为清楚起见,如果我搜索 kenny(在 text3 属性中),它会显示“kenny”的结果,并且只显示 kenny 的来源。现在它只会过滤 text1 属性中的文本。

const [searchTerm, setSearchTerm] = useState("");


const SlideData = [
  {
    slideIndex: 1,
    title: "My name is Bob",
    text1: "Bob likes to eat hamburgers",
    text2: "Kenny likes to eat hot dogs",
    text3: "Terry likes milkshakes"
  },
  {
    slideIndex: 2,
    title: "My name is Jill",
    text1: "Jill likes to eat hamburgers",
    text2: "Joshua likes to eat hot dogs",
    text3: "Steven likes milkshakes"
  }
]



        <div className="search-results">
          <ul className="search-list">
            {SlideData.filter((item) => {
              if (searchTerm === "") {
                return null;
              } else if (item.text1.toLowerCase().includes(searchTerm.toLowerCase())) {
                return item;
              }
            }).map((item) => (
              <div key={item.slideIndex} style={{ padding: "10px" }}>
                <li className="search-item">{item.text1}</li>
                <a
                  className="search-link"
                  onClick={() => {
                    context.setCurrentSlide(item.slideIndex);
                    setSearchTerm("");
                  }}
                 >
                  Go To Slide {item.slideIndex}
                </a>
              </div>
            ))}
          </ul>
        </div>
      

【问题讨论】:

    标签: reactjs object filter properties array.prototype.map


    【解决方案1】:

    理想情况下,您不应在客户端执行搜索操作。但是,在这种情况下,您可以简单地连接所有属性来搜索它们。

    <div className="search-results">
      <ul className="search-list">
        {SlideData.filter(item => {
          if (searchTerm === '') {
            return null;
          } else {
            let searchText = item.title + item.text1 + item.text2 + item.text3;
            if (searchText.toLowerCase().includes(searchTerm.toLowerCase())) {
              return item;
            }
          }
        }).map(item => (
          <div key={item.slideIndex} style={{ padding: '10px' }}>
            <li className="search-item">{item.text1}</li>
            <a
              className="search-link"
              onClick={() => {
                context.setCurrentSlide(item.slideIndex);
                setSearchTerm('');
              }}
            >
              Go To Slide {item.slideIndex}
            </a>
          </div>
        ))}
      </ul>
    </div>;
    

    【讨论】:

    • 谢谢!是的,我通常会查询后端,但这只是一个信息很少的幻灯片,所以这是完美的!
    • 我很高兴能帮上忙 :)
    • 你知道我如何使用 标签来突出显示结果中搜索的单词吗?只是好奇
    • 是否需要高亮搜索项列表项?
    • 您需要在项目文本中找到 searchTerm 的开始和结束索引。然后,您可以将自定义 CSS 应用于字符串的该部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多