Я учусь js, и теперь у меня есть задача отфильтровать массив некоторых видов точек. В начале у меня есть 4 выбора с некоторыми опциями и карта, где отображается 10 пинов. Каждая булавка - это как точка на карте, где кто-то снимает квартиру, дом или что-то еще. Выбранные должны фильтровать эти контакты по четырем параметрам: типу, стоимости, комнатам и жителям. Я запрограммировал фильтры на выбор, но они делают это каждый для себя. Мне нужно несколько фильтров, но когда я использую два (или более) выбора, булавки фильтруют только по последнему использованному выбору.
И живое поле битвы, где я это делаю. http://demo.tlpunity.beget.tech/academy/book/
Вот код.
var secondRender = function(arr) {
mapPins.innerHTML = '';
articleList.innerHTML = '';
render(arr);
};
var allElRender = function(arr) {
mapPins.innerHTML = '';
articleList.innerHTML = '';
render(arr);
};
var allPinsArr = [];
var selects = document.querySelectorAll('.map__filter');
for(var i = 0;i < selects.length; i++) {
selects[i].addEventListener('change', function() {
var selectId = this.id;
if( selectId === 'housing-type'){
var typeValue = document.getElementById('housing-type').value;
var typeOptions = document.getElementsByClassName('map__filter')[0].getElementsByTagName('option');
for(var i=0; i<typeOptions.length; i++){
if(typeValue == near[i].offer.type) {
allPinsArr = near.filter(function(item) {
return item.offer.type == typeValue;
});
secondRender(allPinsArr);
}
else if(typeValue == 'any'){
allElRender(near);
}
}
}
else if( selectId === 'housing-price') {
var priceValue = document.getElementById('housing-price').value;
var priceOptions = document.getElementsByClassName('map__filter')[1].getElementsByTagName('option');
for(var i=0; i<priceOptions.length; i++){
if(priceValue == 'low') {
allPinsArr = near.filter(function(item) {
return item.offer.price < 10000;
});
secondRender(allPinsArr);
}
else if(priceValue == 'middle'){
var allPinsArr = near.filter(function(item) {
return item.offer.price >= 10000 && item.offer.price <= 50000;
});
secondRender(allPinsArr);
}
else if(priceValue == 'high'){
var allPinsArr = near.filter(function(item) {
return item.offer.price > 50000;
});
secondRender(allPinsArr);
}
else if(priceValue == 'any'){
allElRender(near);
}
}
}
else if( selectId === 'housing-rooms') {
var roomsValue = document.getElementById('housing-rooms').value;
var roomsOptions = document.getElementsByClassName('map__filter')[2].getElementsByTagName('option');
for(var i=0; i<roomsOptions.length; i++){
if(roomsValue == '1') {
allPinsArr = near.filter(function(item) {
return item.offer.rooms == roomsValue;
});
secondRender(allPinsArr);
}
else if(roomsValue == '2'){
var allPinsArr = near.filter(function(item) {
return item.offer.rooms == roomsValue;
});
secondRender(allPinsArr);
}
else if(roomsValue == '3'){
var allPinsArr = near.filter(function(item) {
return item.offer.price == roomsValue;
});
secondRender(allPinsArr);
}
else if(roomsValue == 'any'){
allElRender(near);
}
}
}
else if( selectId === 'housing-guests') {
var guestsValue = document.getElementById('housing-guests').value;
var guestsOptions = document.getElementsByClassName('map__filter')[3].getElementsByTagName('option');
for(var i=0; i<guestsOptions.length; i++){
if(guestsValue == '1') {
allPinsArr = near.filter(function(item) {
return item.offer.guests == guestsValue;
});
secondRender(allPinsArr);
}
else if(guestsValue == '2'){
var allPinsArr = near.filter(function(item) {
return item.offer.guests == guestsValue;
});
secondRender(allPinsArr);
}
else if(guestsValue == 'any'){
allElRender(near);
}
}
}
});
}
Это не весь код, а только фильтр. Если нужна информация, скажите мне, пожалуйста. Спасибо за любую помощь.