У меня есть форма с фильтрами. В зависимости от сочетания которых на карте должны отрисовываться разные наборы пинов. Я решал задачу так: при изменении значения какого-либо из фильтров запускается цикл, который проходит все фильтры и собирает из них значения, формируя объект такой же структуры, как и те, что приходят с сервера в массиве, единственное, в объектах с сервера больше свойств. Для фильтрации я сравниваю значения свойств каждого из объектов массива, который прислал сервер, с этим объектом, который содержит значения выбранных фильтров. Если они совпадают, объект попадает в массив отфильтрованных объектов filteredPins, на основании которого и будет отрендерен набор пинов, соответствующий объекту с данной комбинацией фильтров. Но функция работает некорректно: если 1 только фильтр переключается (по отдельности), всё правильно. Как только возникает комбинация с каким-либо ещё фильтром, почему-то в набор попадают те объекты, у которых свойства не равны. Подскажите, пожалуйста, что опять не так…
function getFilteredPins(props, locations) {
var filteredPins = [];
locations.forEach(function (location) {
for (var key in props) {
if (key) {
if (key !== 'features' && props[key] !== location.offer[key].toString()) {
return;
}
if (key === 'features') {
var featuresAmount = props[key].length;
for (var feature = 0; feature < featuresAmount; feature++) {
if (!location.offer.features.includes(props[key][feature])) {
return;
}
}
}
filteredPins.push(location);
}
}
});
if (!filteredPins.length) {
filteredPins = locations.slice();
}
window.map.renderPins(filteredPins);
}
props - это тот объект, который получается в результате переключения фильтров, содержит комбинацию их свойств, имеет вид:
http://skrinshoter.ru/s/121019/TaQJmH5h,
А вот пример того массива объектов, который приходит с сервера и который мне нужно отфильтровать:
http://skrinshoter.ru/s/121019/ZhEbqsHu