我有一系列数据包含一个数组(json文件)中的一些对象,它将通过react显示
class App extends React.Component {
constructor(props){
super(props);
this.state = {
data: [],
.
.
.
}}}
[{'id': '5c0b6cd9e1382352759fbc25', 'hotelinfo': {'hotelsearch': {'realname': 'Korston Hotel Moscow'}},{'id': '5c0b6cd9e1382352759fbc24', 'hotelinfo': {'hotelsearch': {'realname': 'Lavanta Hotel'}},{'id': '5c0b6cd9e1382352759fbc28', 'hotelinfo': {'hotelsearch': {'realname': 'Stanpoli Hotel'}}]
是否可以编写类似于 postsql="select * where realname like '%Korston%'" 的内容来过滤数据以显示此json文件?
[{'id': '5c0b6cd9e1382352759fbc25', 'hotelinfo': {'hotelsearch': {'realname': 'Korston Hotel Moscow'}}]
3 回答
您可以使用underscore js来解决问题,
filterArray
方法需要两个参数,第一个是对象数组,第二个是您需要搜索的查询希望能帮助到你 . 干杯!
Array对象的过滤功能将适用于您 . 它将在Array中输出满足条件的项 .
编辑:
要么
Edit2:
关于你的问题:当用户输入'Korston Hotel Moscow'的任何单词时(例如'Moscow'或'Hotel'或'Korston') . 我建议在检查后设置inputVal值 .
代替
改为以下
不确定数据的存储位置,但由于您使用的是ReactJS,因此应将数据存储在
state
中 .你的州应该是这样的:
然后有几个功能 . 您的过滤器函数找到适当的搜索位置,第二个函数获取结果 .
//获得结果
//过滤功能
希望这可以帮助 .
注意:includes()方法与Internet Explorer不兼容 . 您可以使用indexOf()交换includes() . 这里的区别在于,如果indexOf()返回-1表示它不包含它,您将检查
if indexOf() !== -1
.编辑
此编辑使得返回的结果更加动态而不是静态 . 现在,无论搜索什么,它总会返回“Korston Hotel Moscow” .
现在,它将根据输入返回适当的结果 .
Dynamic Return
将您的getObj方法更改为:
这里的区别是 Map 功能 . 这背后的逻辑是:您要检查该数组中的每个元素或对象并搜索
userInput
. 当你得到适当的结果然后设置这个局部变量returnString
等于它匹配的obj的hotelinfo
的hotelsearch
的realname
(这是checkString
是) . 完成映射后,它会将匹配的值返回到filterObj
.总之,你的
getObj
和filterObj
应该是这样的: