首页 > 解决方案 > 按键值过滤对象

问题描述

我有一个对象数组可以说:

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

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

我的简单想法是:

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

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

标签: javascriptobjectfilterkey

解决方案


You can loop over the keys of the inner object so that doing so you can use Array.some() to get the match of the searched text. It will work for any number of keys of any name so you do not need to get depend on the keys name and 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);


推荐阅读