фильтровать объект по ключевым значениям - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть массив объектов, скажем:

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

Я реализую поиск на веб-сайте, где я могу ввести либо имя, либо фамилию, и он должен фильтровать новый массив по объектам, которые содержат входное значение.
Поэтому, если мой ввод - «лиса», он отфильтрует объект, содержащий ключевое значение «лиса»

моя простая идея была:

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

Но я думаю, есть лучшие способы, в случае изменения имен ключей.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Если я правильно понимаю, все данные, которые вы ищете, находятся в памяти окна браузера, и запрос не отправляется на серверную часть?Если это так, вы можете посмотреть на Лунр: https://lunrjs.com/

0 голосов
/ 18 сентября 2018

Если вы ищете только в значениях, вы можете использовать Object.values() внутри 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)
0 голосов
/ 18 сентября 2018

Вы можете циклически переключаться между клавишами внутреннего объекта, чтобы при этом вы могли использовать Array.some(), чтобы получить совпадение искомого текста.Он будет работать для любого количества ключей с любым именем, поэтому вам не нужно получать зависимость от ключей name и 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...