JSFiddle - React, Tailwind, and code Playground
by Alex Azuero
HTML
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<div id="map" style="width: 500px; height: 400px;"></div>
<div id="multi_filters">
<div class="Group">
<a class="titre">Group</a></br>
A<input type="checkbox" value="GroupA" data-prop="group" checked/>
B<input type="checkbox" value="GroupB" data-prop="group"/>
</div>
</br>
<div class="Number">
<a class="titre">Number</a></br>
1<input type="checkbox" value="1" data-prop="number" checked/>
2<input type="checkbox" value="2" data-prop="number"/>
</div>
</div>
JavaScript
var markers =[];
var locations = [
['GroupA','Bondi Beach', -33.890542, 151.274856, 2],
['GroupB','Coogee Beach', -33.923036, 151.259052, 1],
['GroupA','Cronulla Beach', -34.028249, 151.157507, 1],
['GroupB','Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['GroupA','Maroubra Beach', -33.950198, 151.259302, 1]
];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: new google.maps.LatLng(-33.92, 151.25),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][2], locations[i][3]),
map: map,
title: locations[i][0]+'-'+locations[i][4]
});
marker.group= locations[i][0];
marker.number = locations[i][4];
markers.push(marker);
}
(function(boxes){
for(var i=0;i<boxes.length;++i){
//add click-listener for the checkboxes
google.maps.event.addDomListener(boxes[i],'click',function(){
var props={},box,prop,val,any,marker;
for(var i=0;i<boxes.length;++i){
box=boxes[i];
prop=box.getAttribute('data-prop');
val=box.value;
if(box.checked){
//variable to determine if there is any checkbox checked
any=true;
//populate an object with arrays
//(key is the property-name)
if(!props[prop]){
props[prop]=[];
}
//push the value to the particular array
props[prop].push(val);
}
}
//create RegExp's from the arrays
for(var k in props){
props[k]=new RegExp('^('+props[k].join('|')+')$');
}
//iterate over the markers
for(var m=0;m<markers.length;++m){
marker=markers[m];
//no checkbox is checked, hide all...