我有一组对象可以说:
var ob=[
{
name:'john',
surname:'fox'
}, {
name:'jill',
surname:'hog'
}
];
我正在网站上实现搜索,我可以在其中输入名称或姓氏,并且应该按包含输入值的对象过滤新数组。
因此,如果我输入的是“ fox”,它将过滤掉包含键值“ fox”的对象
我的简单想法是:
ob.filter(item=>{ return item.name.includes(searchterm) ||
item.surname.includes(searchterm)}
但是我想有更好的方法,以防键名更改。
答案 0 :(得分:3)
您可以循环遍历内部对象的键,从而可以使用Array.some()
来获取搜索到的文本的匹配项。它适用于任何名称的任意数量的键,因此您不必依赖键name
和surname
。
var ob = [{
name: 'john',
surname: 'fox'
},
{
name: 'jill',
surname: 'hog'
}
];
var searchText = 'fox';
var res = ob.filter((item)=>{
return Object.keys(item).some((key)=>item[key].includes(searchText));
});
console.log(res);
答案 1 :(得分:3)
如果仅在值中搜索,则可以在Object.values()
内使用filter()
,然后使用includes()
查找输入是否在值数组中。
var ob=[{name:'john', surname:'fox'},{name:'jill',surname:'hog'}];
let input = 'fox';
var res = ob.filter(o=>Object.values(o).includes(input))
console.log(res)
答案 2 :(得分:0)
如果我正确理解,您从中搜索的所有数据都在浏览器窗口内存中,并且查询不会转到服务器端?如果是这样,您可能要看一下Lunr:https://lunrjs.com/