#javascript #jquery #leaflet
#javascript #jquery #листовка
Вопрос:
У меня есть карта листовок, которая показывает 30-50 различных маркеров. Под картой у меня есть простая HTML-форма, которую следует использовать для фильтрации.
Пользователи будут выбирать фильтры (например: «Город» и «Идентификатор»). Тогда на карте должны отображаться только маркеры, которые удовлетворяют этим двум фильтрам. Все остальные маркеры должны быть удалены.
Я предполагаю, что логика для этого такова:
После установки фильтра выполните поиск в источнике маркеров в формате json и удалите все, что не запрошено. Но я понятия не имею, как это реализовать. Также как восстановить все маркеры по умолчанию после отклонения фильтра? Также фильтр должен находиться за пределами карты листовок в виде отдельной HTML-формы.
И вот как я инициализирую маркеры
var city = [
{name: "City1", loc: [11.111, 22.222], id: "1"},
{name: "City2", loc: [12.111, 23.222], id: "2"},
{name: "City3", loc: [13.111, 24.222], id: "3"},
{name: "City3", loc: [14.111, 25.222], id: "4"}
];
Я не включил остальной код, поскольку это стандартный код листовки, чтобы сохранить его компактным.
Ответ №1:
Вы должны использовать метод Array.prototype.filter для фильтрации исходного массива городов с использованием ID
и name
:
const cities = [
{name: "City1", loc: [11.111, 22.222], id: "1"},
{name: "City2", loc: [12.111, 23.222], id: "2"},
{name: "City3", loc: [13.111, 24.222], id: "3"},
{name: "City3", loc: [14.111, 25.222], id: "4"}
];
let selectedCity = "City2";
let selectedId = "2";
let filteredList = cities.filter( city => {
return city.name === selectedCity amp;amp; city.id === selectedId
});
console.log( filteredList );