javascript - 搜索过滤器不会接受一个值的“Round”,因为“Ground”是每个结果中的一个值
问题描述
我正在为游泳池设计一个照片库。搜索栏会根据输入的字符更新状态,类似于 Netflix 搜索栏。它会更新 JSON 文件中的所有键,类似于在 Netflix 上搜索“Good Will Hunting”作为标题或“Matt Damon”作为演员的方式。
我遇到的问题是“圆形”将是一个常见的搜索词,在 JSON 中触发“形状”:“圆形”。但另一个类别是“类型”:“地上”或“类型”:“地下”。
因此,如果您搜索圆形池,则查询不会过滤以仅显示圆形池,因为“圆形”也会触发“地面”一词。它显示了圆形水池和任何触发“地上”或“地下”的水池的混合。
我试过弄乱 .filter 和 .includes 方法无济于事。我不确定我是否错过了那里的东西或什么。
我还将研究正则表达式以可能指示“如果搜索词“round”没有前面的字符,则显示圆形池并忽略地面触发器”。
import React, { Component } from "react";
class App extends Component {
state = {
filter: "",
data: [
{
shape: "Round",
type: "Above-ground"
},
{
shape: "Rectangle",
type: "In-ground"
},
{
shape: "Kidney",
type: "In-ground"
}
]
};
handleChange = event => {
this.setState({
filter: event.target.value
});
};
render() {
const { filter, data } = this.state;
const lowerCasedFilter = filter.toLowerCase();
const filteredData = data.filter(item => {
return Object.keys(item).some(key =>
item[key].toLowerCase().includes(lowerCasedFilter)
);
});
return (
<div>
<input value={filter} onChange={this.handleChange} />
{filteredData.map(item => (
<div>
<p>Shape: {item.shape}</p>
<p>Type: {item.type}</p>
<hr />
</div>
))}
</div>
);
}
}
export default App;
我希望搜索过滤器仅在用户输入“round”时显示“round”池,而不是由于“ground”一词而显示多余的结果
解决方案
在数据对象的任何字段中查找一个单词是否以 lowerCasedFilter 开头
item[key].toLowerCase().split(' ').some(word => word.slice(0, lowerCasedFilter.length) === lowerCasedFilter)
const data = [
{
shape: "Round",
type: "Above-ground"
},
{
shape: "Rectangle",
type: "In-ground"
},
{
shape: "Kidney",
type: "In-ground"
}
]
filteredData = (lowerCasedFilter) => data.filter(item => {
return Object.keys(item).some(key =>
item[key].toLowerCase().split(' ').some(word => word.slice(0, lowerCasedFilter.length) === lowerCasedFilter)
);
});
console.log( filteredData('round') )
推荐阅读
- c++ - Qt SQLite 没有查询或参数计数不匹配
- python - 如何在python中使用比较符号和输入
- typescript - 打字稿 - 数组的键值
- powershell-5.0 - 有没有办法用打字机效果输出运行 powershell 脚本?
- xcode - 升级到 macOS Catalina 后,运行 XCUITest 将不断出现“正在验证“AAA”...”弹出窗口
- c++ - 缓存 std::array 的选定元素并在 C++ 中自动保持一致
- c - 在 C 中运行用户定义的函数时出现“与局部变量相关的堆栈内存地址”错误
- python - matplotlib:在每条迹线与右侧 y 轴相交的地方放置图例标签
- android - 原生 *.so 库及其标头在 android 项目中的位置?
- javascript - 按日期顺序对nodejs中的数组进行排序(从最近到最旧)