Сравнить значения свойств 2-х объектов

У меня есть форма с фильтрами. В зависимости от сочетания которых на карте должны отрисовываться разные наборы пинов. Я решал задачу так: при изменении значения какого-либо из фильтров запускается цикл, который проходит все фильтры и собирает из них значения, формируя объект такой же структуры, как и те, что приходят с сервера в массиве, единственное, в объектах с сервера больше свойств. Для фильтрации я сравниваю значения свойств каждого из объектов массива, который прислал сервер, с этим объектом, который содержит значения выбранных фильтров. Если они совпадают, объект попадает в массив отфильтрованных объектов 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

У вас пуш происходит в цикле. Соответственно если мы берем первое свойство и оно удовлетворяет проверкам то объект весь объект заносится в массив. После этого мы проверяем второе свойство и если оно опять удовлетворяется этот же объект заносится в массив еще раз.
Вынесите filteredPins.push(location);
за пределы цикла for (var key in props) {

Да это просто магия!! Действительно, всё работает!! Спасибо огромное!!!