sla*_*aJS 3 javascript key object filter
我有一组对象可以说:
var ob=[
{
name:'john',
surname:'fox'
}, {
name:'jill',
surname:'hog'
}
];
Run Code Online (Sandbox Code Playgroud)
我正在网站上实现搜索,我可以在其中输入姓名或姓氏,并且它应该通过包含输入值的对象过滤新数组。
因此,如果我的输入是 'fox',它将过滤掉包含键值 'fox' 的对象
我的简单想法是:
ob.filter(item=>{ return item.name.includes(searchterm) ||
item.surname.includes(searchterm)}
Run Code Online (Sandbox Code Playgroud)
但我想有更好的方法,以防键名改变。
您可以遍历内部对象的键,这样您就可以使用它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);Run Code Online (Sandbox Code Playgroud)
如果您仅在值中搜索,则可以使用Object.values()inside 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)Run Code Online (Sandbox Code Playgroud)