我有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);
});
});
但是没有隐藏的标记。
这是控制台日志的屏幕
startValue
的值
据我所知它没有隐藏因为数组中的值和输入值不同?
我该如何解决?
更新
在@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
答案 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);
});
});