按键值过滤对象

3
我有一个对象数组,比如说:
var ob=[
  {
    name:'john', 
    surname:'fox'
  }, {
    name:'jill',
    surname:'hog'
  }
];

我正在网站上实现搜索功能,用户可以输入名字或姓氏,它会通过包含输入值的对象来过滤新数组。
因此,如果我的输入是“fox”,它会过滤出包含键值“fox”的对象。
我的简单想法是:
ob.filter(item=>{ return item.name.includes(searchterm) || 
item.surname.includes(searchterm)}

但我想还有更好的方法,以防键名发生变化。
2个回答

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);


这是一个很棒的解决方案。我添加了小写转换,这样过滤就不再区分大小写了。 return Object.keys(item).some((key)=>item[key].toLowerCase().includes(searchText.toLowerCase())); - Jeff Bluemel

6

如果您只想搜索值,可以在filter()中使用Object.values(),并使用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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接