JS脚本中的条件工作错误

时间:2017-11-23 11:41:27

标签: javascript google-maps

我有这个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

在标记中我有这个数组

enter image description here

如您所见, IMEI 位于数组中且值相同。有人可以解释为什么我的病情不起作用吗?

2 个答案:

答案 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));