Фильтровать массив (с вложенными объектами) по динамическим реквизитам - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть массив из N объектов.Я хотел бы написать фильтр, который фильтрует с использованием JSON.stringify на основе нескольких динамических свойств.

Но динамический без статических свойств (как в коде выше)
У вас есть идеи?

return items.filter(item =>
    JSON.stringify(item.prop1 && item.prop2 && ....)
        .toLowerCase()
        .includes(searchParam)
);

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019
 items.filter(item => ["prop1", "prop2"].some(key => item[key].toLowerCase() === searchParam))

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

0 голосов
/ 11 февраля 2019

Вам нужно написать функцию, которая преобразует ваш объект в урезанный объект с нужными вам свойствами:

function getProperties(obj, propList) {
  var newObj = {};
  propList.forEach(prop => {
    newObj[prop] = obj[prop];
  });
  return newObj;
}

И тогда ваш код будет выглядеть так:

var propList = ['id','name','date']; // just for example, put whatever properties you want in here
return items.filter(item =>
    JSON.stringify(getProperties(item, propList))
        .toLowerCase()
        .includes(searchParam)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...