Как отфильтровать динамические данные Json, используя underscore.js? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть массив объектов json с динамическими данными, т.е. ключи и значения являются динамическими как:

arr=[{"a":"email"},{"b":"chat"},{"c":"email"},{"d":"chat"},{"e":"email"}]

Размер arr может измениться, т. Е. Может иметь любое количество объектов json.

Как мне отфильтровать данные, используя underscore.js ??

Вот что я пытался сделать:

  filterData(searchValue:string){
        this.skillGrpsFilteredData= _.filter(this.skillGroupsAndTypes, function(obj) {
        return ~obj.toLowerCase().includes(searchValue) as any;
      }); 
  }

Но этот подход не работает, так как ключи в приведенном выше массиве obj являются динамическими, т.е. "a, b, c, d, e, .." являются динамическими по своей природе. И searchValue - это значение, получаемое из интерфейса пользователя.

Как мне выполнить поиск по ключам, т.е. если я наберу searchValue = a, это должно дать мне этот объект и т. Д.

Спасибо и С уважением

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Попробуйте следующую функцию.В параметре массива вы можете передать arr = [{"a": "email"}, {"b": "chat"}, {"c": "email"}, {"d": "chat"}, {"e": "email"}] и в параметре searchKey передать, например, "a", он вернет {"a": "email"}.Если совпадение не найдено, функция вернет ноль

searchByKey(array,searchKey ) {
        for (let obj of array) {
          for (let key in obj) {
            if (key == searchKey) {
             return obj;
            }
          }
        }
        return null;
      }
0 голосов
/ 09 июня 2019

Попробуйте следующее. Следующая функция фильтрует объекты массива, содержащие искомое значение как по ключу, так и по значению объекта. В вашем случае вы можете передать «a» или «email», чтобы получить объекты

 function searchObject(array , searchValue){
    return array.filter(item=>{ return Object.keys(item).includes(searchValue) ||Object.values(item).includes(searchValue)})
}

let arr=[{"a":"email"},{"b":"chat"},{"c":"email"},{"d":"chat"},{"e":"email"}]
console.log(searchObject(arr,'a'));

, если выхотите просто фильтровать по ключу, а не по значению объекта, удалите

Object.values(item).includes(searchValue) 

из условия или

, если вы хотите попробовать indexOf try

function searchObject(array , searchValue){
    return array.filter(item=>{ return 
    Object.keys(item).indexOf(searchValue)>=0})
}
...