我有这个JavaScript:
这是我的代码
$(document).ready(function () {
filtered.length = 0;
$('#filter').on('click',
function () {
heatmap.setMap(null);
imei = $('#selectVehicles').val();
var startValue = $('#startDate').val().split("/");
var endValue = $('#endDate').val().split("/");
var valDateStart = new Date(startValue[2], startValue[1] - 1, startValue[0]);
var valDateEnd = new Date(endValue[2], endValue[1] - 1, endValue[0]);
filtered = markers.filter(function (marker) {
var getDate = marker.date.match(/\d/g).join('');
var markerDate = new Date(parseFloat(getDate));
return ((markerDate >= valDateStart && markerDate <= valDateEnd) && marker.imei === imei);
});
var pointArray = new google.maps.MVCArray(filtered);
console.log(pointArray);
heatmap = new google.maps.visualization.HeatmapLayer({
data: pointArray
});
heatmap.setMap(map);
});
通过此脚本,我需要根据日期和 IMEI
过滤标记条件在这一行:
return ((markerDate >= valDateStart && markerDate <= valDateEnd) && marker.imei === imei);
在 IMEI 中,我的值为 35745407257535
在标记中我有这个数组
如您所见, IMEI 位于数组中且值相同。有人可以解释为什么我的病情不起作用吗?
答案 0 :(得分:1)
我认为这是因为.val()在读取imei时会返回一个字符串。
标记对象中的imei是一个数字,您使用了完全匹配运算符===。尝试使用==或parseInt()围绕来自.val()的imei值,例如
imei = parseInt($('#selectVehicles').val());
答案 1 :(得分:1)
你的问题在这里:
return ((markerDate >= valDateStart && markerDate <= valDateEnd) && marker.imei === imei);
JavaScript中的:
=== 表示按值和类型相等,例如:
var 1 = "1";
var 2 = "2";
var 3 = 3;
1 === 2 //correct
1 === 3 //false
== 意味着值相等:
var 1 = "1";
var 2 = "2";
var 3 = 3;
1 == 2 //correct
1 == 3 //correct
使用强制转换来实现此目的:
return ((markerDate >= valDateStart && markerDate <= valDateEnd) && marker.imei === parseInt(imei));