JavaScript循环检查重复值

时间:2017-04-01 17:50:45

标签: javascript arrays for-loop

我在尝试检查数组中是否存在日期时遇到了麻烦。

 for(var i = 0; i< crisislist.length; i++){
        hazecounter = 1;
        if(crisislist[i].category == 1){
            if(crisislist[i].date != crisislist[i+1].date) {
                hazelabel.push(crisislist[i].date);
            }else{
                hazecounter++; 
            }
            hazedata.push(hazecounter);
        }
 }

日期的样本数据是:

["01-02-2017", "22-03-2017", "22-03-2017", "07-08-2017"]

hazelabel,hazedata的预期输出应为:

hazelabel:[“01-02-2017”,“22-03-2017”,“07-08-2017”]    hazedata:[1,2,1]

使用上面的代码,当我检查数组中的最后一个元素并尝试进行比较时,它会向我抛出一条错误消息:

Uncaught TypeError: Cannot read property 'date' of undefined

我认为这是因为当我到达数组的最后一个元素时,我试图找到危险列表[I + 1] .date,它找不到它,从而找不到错误消息。

知道怎么解决这个问题吗?提前谢谢!

4 个答案:

答案 0 :(得分:0)

你只需要检查到倒数第二:

for(var i = 0; i< (crisislist.length-1); i++){
        hazecounter = 1;
        if(crisislist[i].category == 1){
            if(crisislist[i].date != crisislist[i+1].date) {
                hazelabel.push(crisislist[i].date);
                if (crisislist.length-2 == i)
                {
                    hazelabel.push(crisislist[i+1].date);
                }
            }else{
                hazecounter++; 
            }
            hazedata.push(hazecounter);
        }
 }

答案 1 :(得分:0)

您的if语句将成为一个问题。

if(crisislist[i].date != crisislist[i+1].date) {

您正在循环中访问危险列表[i + 1]并转到&lt; crisislist.length。这意味着如果你有一个大小为4的数组,你的循环将一直持续到i = 3,但你从数组中访问i + 1(危机列表[4]),这将是未定义的。

尝试更改for循环以转至crisis.length-1

答案 2 :(得分:0)

仅当crisislist[i+1].date未指向最后一个元素时,您才能访问i

另请注意,要获得所需的结果,您需要移动if块内的hazedata.push并将hazecounter的初始化放在循环前面。

var hazecounter = 1;
for (var i = 0; i< crisislist.length; i++) {
    if (crisislist[i].category == 1) {
        if (i == crisislist.length-1 || crisislist[i].date != crisislist[i+1].date) {
            hazelabel.push(crisislist[i].date);
            hazedata.push(hazecounter);
            hazeCounter = 1;
        } else {
            hazecounter++; 
        }
    }
}

答案 3 :(得分:0)

检查该代码。如果您有任何疑问,请添加评论:)在我的解决方案中,日期不必排序。

      

$(document).ready(function(){
    $("button").click(function(){
    var $this = $(this);
    $this.attr('value', $this.attr('value') === "0" ? "1" : "0");
    alert("The button val is now " + $this.attr('value'));
  });
});