фильтровать массив JSON javascript - PullRequest
0 голосов
/ 18 сентября 2018

Я просто думаю о том, как упростить мой код фильтра ниже.Он отфильтровывает все строки JSON из массива JSON, который содержит искомые значения в одном из трех конкретных ключей строки JSON.Моя Visual Studio улыбается мне, что если я шучу из-за сложности своего кода: D Так что мне просто любопытно, есть ли другой способ изменить мой фрагмент кода, чтобы сделать его более эффективным.

return _.filter(obj, item => {
    return _.every(filterParams, keyword => {
        return _.some(item, value => {
            return _.isString(value) && (
              item.names1.toLowerCase().includes(keyword.toLowerCase()) ||
              item.names2.toLowerCase().includes(keyword.toLowerCase()) ||
              item.names3.toLowerCase().includes(keyword.toLowerCase()))
        })
    });
  });

Вот пример данных:

export const data = [{
  "HELP": "ageGroup1",
  "Name": "ga1",
  "EN": "ageGroup1",
  "CZ": "N",
  "names1": "AgeGroup",
  "names2": "Element",
  "names3": "N"
}, {
  "HELP": "Level2",
  "Name": "L2",
  "EN": "aggregationGroup",
  "CZ": "N",
  "names1": "AggregationLevel",
  "names2": "ElementLevel",
  "names3": "N"
}]

Ответы [ 2 ]

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

Я попытался изменить ваш код.Я не думаю, что вам нужно использовать lodash.Возможно, это не точный рефакторинг вашего кода, но, надеюсь, это даст вам представление о том, как он может выглядеть.

let keywordCompare = (keyword) => keyword.toLowerCase().includes(keyword.toLowerCase());
let filteredNames = obj.filter(
obj => keywordCompare(obj.name1) || keywordCompare(obj.name2) || keywordCompare(obj.name3)
);

На мой взгляд, он выглядит намного чище.

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

Вы можете взять ключи объекта и итерировать с some для короткого замыкания, если найдено.

return _.filter(obj, item => {
    return _.every(filterParams, keyword => {
        return _.some(item, value => {
            return _.isString(value) && ['names1', 'names2', 'names3']
                .some(n => item[n].toLowerCase().includes(keyword.toLowerCase()))
        })
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...