Интересно, как я мог бы использовать lodash
для фильтрации некоторых объектов, используя массив параметров фильтров.
Пока у меня есть функция, которая может использовать опцию массива фильтров, но мне не удается учесть оператор LOGICAL
(AND, OR).
Edit:
мы находим те объекты, которые соответствуют каждому условию LOGICAL
: AND
или любому условию LOGICAL
: OR
См. Эту демонстрацию:
var toFilter = [
{"foo" : 1, "bar": 0},
{"foo" : 1, "bar": 0},
{"foo" : 2, "bar": null}
];
var filters = [
{"KEY": "foo", "VALUE": 1, "EQUALITY": "EQUAL", "LOGICAL": "OR"},
{"KEY": "bar", "VALUE": 0, "EQUALITY": "NOT_EQUAL", "LOGICAL": "AND"}
];
//the function should be equivalent to this one:
_.filter(toFilter, function(obj) { return obj.foo == 1 || obj.bar != 0 });
//this function does not take the LOGICAL operator ("AND" and "OR") in consideration
_.uniq(_.flatMap(filters, function(filter) {
return _.filter(toFilter, function(obj) {
if (filter.EQUALITY == "EQUAL") {
return obj[filter.KEY] == filter.VALUE;
} else {
return obj[filter.KEY] != filter.VALUE;
}
});
}));
Это очень простой пример, но список фильтров может быть намного больше.