有一个像:
这样的数组let MyArray = [{
id: 1, name: 'xx', age: '20', prop: val, propx: valx
},
{
id: 2, name: 'yy', age: '30', prop: val2, propx: valy
},
{
id: 3, name: 'zz', age: '40', prop: val3, propx: valz
}]
如何根据对象属性过滤此数组以获取搜索结果?我想以这种形式编写一个函数,并得到myArray
的过滤结果:
search(myArray, ['name', 'prop', 'propx'], searchKey)
条件应该是:
MyArray[i][name].indexOf(searchKey) > -1 || MyArray[i][prop].indexOf(searchKey) > -1 || MyArray[i][propx].indexOf(searchKey) > -1)
是否有可能动态生成此OR规则? 我已经做过的是:
MyArray.filter((item) => item['name'].indexOf('x') > -1 || item['prop'].indexOf('x') > -1))
这已经有效,但它不是动态的,因为如果我想搜索' propx'我必须重写这样的条件:
item['name'].indexOf('x') > -1 || item['prop'].indexOf('x') > -1 || item['propx'].indexOf('x') > -1
它看起来像一个递归,但我不能再想了^^
答案 0 :(得分:0)
我觉得使用像match-sorter这样的东西可以完成这些用例。
const result = matchSorter(MyArray, searchKey, { keys: ['name', 'prop', 'propx']}
当有人已经为你完成工作时,没有必要重新发明轮子。
答案 1 :(得分:-1)
您可以使用lodash中的_.filter。 https://lodash.com/docs#filter