热图上的标记没有隐藏(JS)

时间:2017-11-09 13:02:42

标签: javascript jquery google-maps google-maps-api-3

我有JS代码来过滤地图上的标记

这是

 $('#filter').on('click',
   function () {
       var startValue = $('#startDate').val();
       var endValue = $('#endDate').val();

       map.markers = [];
       map.markers.push(marker);
       //console.log(map.markers);
       $.each(map.markers, function (i, marker) {
           console.log(marker);
           if (marker.date === startValue)
               marker.setMap(null);


       });
   });

但是没有隐藏的标记。

这是控制台日志的屏幕

enter image description here

startValue的值

enter image description here

据我所知它没有隐藏因为数组中的值和输入值不同?

我该如何解决?

更新

在@scaisEdge回答之后我编辑了这样的代码

 $('#filter').on('click',
   function () {
       var startValue = $('#startDate').val();
       var endValue = $('#endDate').val();
       var myDate = new Date(startValue);
       map.markers = [];
       map.markers.push(marker);
       //console.log(map.markers);
       $.each(map.markers, function (i, marker) {
           console.log(marker);
           if (marker.date === myDate)
               marker.setMap(null);
       });

   });

但标记仍然可见。

这是所有剧本的小提琴

jsfiddle.net/nemesises666/pj6wa52h/3

3 个答案:

答案 0 :(得分:1)

日期实例(如new Date()中所示)是对象。两个对象不相等,除非它们是同一个对象。

你可以尝试:

       var getDate = marker.date.match(/\d/g).join(''); // "1508341846000"
       var markerDate = new Date( parseFloat( getDate ) );
       var valDate = new Date(startValue);
       if ( markerDate.getTime() === valDate.getTime() ) {
           marker.setMap(null);
       } else {
          console.log('marker date is',markerDate.getTime(),'valdate is',valDate.getTime());
       }

比较数字与数字

编辑:添加了其他条件以检查日期时间不同的原因

EDIT2 :我现在可以看到您的标记不是google.maps.Marker个实例,而是google.maps.visualization.WeightedLocation个没有“setMap”方法的对象。热图可以整体更新数据,而不是关闭特定的数据点。

你循环应该像

var auxMarkers=[];

$.each(map.markers, function (i, datapoint) {
      if (datapoint should be kept in the heatmap) {
         auxMarkers.push(datapoint);
      }
});

Heatmap.setData(auxMarkers);

答案 1 :(得分:0)

如果你的输入是格式09/11/2017

尝试构建适当的数据

 var myDate  =   new Date(startValue);

答案 2 :(得分:0)

尝试这样的事情..

我首先将值从marker.date剥离到float并进入Date,然后将其与所选日期进行比较,看看它是否适合你



$('#filter').on('click',
   function () {
       var startValue = $('#startDate').val();
       var endValue = $('#endDate').val();

       map.markers = [];
       map.markers.push(marker);
       //console.log(map.markers);
       $.each(map.markers, function (i, marker) {
           var getDate = marker.date.match(/\d/g).join(''); // "1508341846000"
           var markerDate = new Date( parseFloat( getDate ) );
           var valDate = new Date(startValue);
           if ( markerDate === valDate )
               marker.setMap(null);

       });
   });