在Array中搜索多个键

时间:2018-03-11 22:35:08

标签: javascript

有一个像:

这样的数组
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

它看起来像一个递归,但我不能再想了^^

2 个答案:

答案 0 :(得分:0)

我觉得使用像match-sorter这样的东西可以完成这些用例。

const result = matchSorter(MyArray, searchKey, { keys: ['name', 'prop', 'propx']}

当有人已经为你完成工作时,没有必要重新发明轮子。

答案 1 :(得分:-1)

您可以使用lodash中的_.filter。 https://lodash.com/docs#filter