按键值过滤对象

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)

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

Ank*_*wal 8

您可以遍历内部对象的键,这样您就可以使用它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);
Run Code Online (Sandbox Code Playgroud)


Eme*_*eus 6

如果您仅在值中搜索,则可以使用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)