javascript - 如何使对象数组的搜索框在区分大小写且无空格的情况下使用react

标签 javascript arrays reactjs object search

我将这一系列对象放入我的状态

this.state = {
            data: {
                products: [
                    {
                        name: 'Iphone',
                        image: '/logo/Apple-Logo.jpg',
                        price: 1000
                    },
                    {
                        name: 'Google',
                        image: '/logo/Apple-Logo.jpg',
                        price: 700
                    },
                    {
                        name: 'Samsung',
                        image: '/logo/Apple-Logo.jpg',
                        price: 1700
                    },
                    {
                        name: 'Sony ',
                        image: '/logo/Apple-Logo.jpg',
                        price: 300
                    },
                ],         
        };


我希望能够使用区分大小写且没有空格的方式进行搜索。

所以我想有这样的东西,它将参数包含一个属性和searchValue

function searchProduct(property, searchValue) {
  ...
  return newProduct;
}


这样我就可以这样称呼它

let newGoogleProduct = searchProduct('name', 'Google');


这将给我所有名称为Google的产品

最佳答案

您可以使用filter和indexof

在您的状态下,只需添加变量即可处理搜索结果

this.state = {
        searchResults: null
        data: {
            products: [
                {
                    name: 'Iphone',
                    image: '/logo/Apple-Logo.jpg',
                    price: 1000
                },
               .
               .
               .
               .
            ],         
    };


然后添加一个事件处理程序

searchProduct = (e) => {
if (!e.target.value) {
    this.setState({
        searchResults: null
    });
    return
}
let results = this.state.data.products.filter(product =>
    product.name.toLowerCase().trim().indexOf(e.target.value.toLowerCase().trim()) !== -1);
this.setState({
    searchResults: results
})


};

并在渲染中添加此行

 let products = this.state.searchResults ? this.state.searchResults :this.state.data.products;


最后将此代码添加到您的jsx

 <p> search box </p>
 <input type='text' onChange={this.searchProduct}/>
 {products ? products.map(product => (
    <div key={product.name}>
         <img src={product.image}/>
          <p> {product.name} </p>
    </div>
         ))
    : ""
  }

关于javascript - 如何使对象数组的搜索框在区分大小写且无空格的情况下使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751801/

相关文章:

reactjs - 使用 Rollup 和 Sass react 可摇树的组件库

javascript - JavaScript array.length 的时间复杂度

javascript - 在 NodeJS 的一个模块中导出多个函数

ruby - 如何在不影响第一维的情况下加入第二维或第三维数组项

java - 在Java中对数组进行递归排序,偶数出现在数组前面。

reactjs - Nextjs 404 重新加载/刷新操作错误

在 netlify 中部署时未拾取 CSS 样式

javascript - Azure Blob 静态网站中的乱码

javascript - 如何解决 IE 11 中 ExcelJS 'Object doesn' t 支持属性或方法分配异常

javascript - 使用 javascript 从数组中获取值