Клуб API Карт

Фильтрация меток по нескольким свойствам ObjectManager

Удалённый пользователь
18 июля, 19:49

Весь функционал реализован с помощью ObjectManager. Объекты выгружаются из JSON, порядка 3000. Необходимо реализовать фильтрацию, по виду объекта и цене. 

Фрагмент JSON:
"properties": {
                "code": "160058",
                "cost": "8500",
                "typeObject": "home",
                "balloonContentBody": ""
            },

Кнопки с чекбоксами:
<input class="" type='checkbox' value="home" checked=true/>
<input class="" type='checkbox' value="flat" checked=true/>

function mapFilter () {
var item = $( "input[type='checkbox']" );
obj = {};
item.each(function( index ) {
  obj[$( this ).val()] = $( this ).prop('checked');
});
objectManager.setFilter(getFilterFunction(obj));
};
function getFilterFunction(categories){
    return function(obj){
        var content = obj.properties.typeObject;
        return categories[content];
    }
};
$('input[type='checkbox']').click(mapFilter);
Фильтер работает.

Необходимо еще фильтровать по цене (properties.cost) c сохранением результата первого фильтра.
function mapFilterCost () {
var costMin = $("#input_cost_min").val(),
    costMax = $("#input_cost_max").val();
objectManager.setFilter('properties.cost >= "'+costMin+'" && properties.cost <= "'+costMax+'"');
};

Подскажите как объединить два фильтра. Спасибо.

5 комментариев
Подписаться на комментарии к посту
Используйте функцию-фильтр  и объедините в ней условия
Удалённый пользователь
18 июля, 20:04
ок! Спасибо пробую...
Удалённый пользователь
19 июля, 10:58
Мое решение: 
function mapFilter () {
var item = $( ".map_obj_butt" );
obj = {};
item.each(function( index ) {
obj[$( this ).val()] = $( this ).prop('checked');
});
objectManager.setFilter(getFilterFunction(obj));
};
function getFilterFunction(categories){
var costMin = $("#input_cost_min").val(),
costMax = $("#input_cost_max").val();
return function(obj){
if (obj.properties.cost >= costMin && obj.properties.cost <= costMax) {
var content = obj.properties.balloonContent;
return categories[content];
};
}
};

Переусложнили. If там не нужен


return function(obj) {
  var props = obj.properties;
  return props.cost >= costMin && props.cost <= costMax && categories[props.balloonContent];
}
Удалённый пользователь
19 июля, 11:22
ок! Спасибо!