按键值过滤对象

时间:2018-09-18 13:30:13

标签: javascript object filter key

我有一组对象可以说:

var ob=[
  {
    name:'john', 
    surname:'fox'
  }, {
    name:'jill',
    surname:'hog'
  }
];

我正在网站上实现搜索,我可以在其中输入名称或姓氏,并且应该按包含输入值的对象过滤新数组。
因此,如果我输入的是“ fox”,它将过滤掉包含键值“ fox”的对象

我的简单想法是:

ob.filter(item=>{ return item.name.includes(searchterm) || 
item.surname.includes(searchterm)}

但是我想有更好的方法,以防键名更改。

3 个答案:

答案 0 :(得分:3)

您可以循环遍历内部对象的键,从而可以使用Array.some()来获取搜索到的文本的匹配项。它适用于任何名称的任意数量的键,因此您不必依赖键namesurname

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/