阵列推送第一次不起作用

Array push doesnt work the first time

本文关键字:不起作用 第一次 阵列      更新时间:2023-09-26

我有以下代码每秒运行一个函数

var counter=setInterval(timer, 1000);
var global = [];
function timer()
{
    var strJSON = '[{"id":"1","timeout":"2013-09-11 03:00:00"},{"id":"2","timeout":"2013-09-11 03:00:00"}]';
    var currentRequest = [];
    var obj = jQuery.parseJSON(strJSON);
    for (var i=0; i<obj.length; i++) {
        var id = obj[i].id;
        var timeout = obj[i].timeout;
        if(id in global)
        {
            alert(id+' in array');
        } else {
            alert(id+' not in array');
            alert(id+' added');
            global.push(id);
        }
    }
}

我使用它来保持全局变量更新但没有重复项。但是,当脚本运行时,据说在第一次运行中添加了第二个 id,但它并没有真正添加,因为我得到以下输出:

/**

首次运行 **/

  • 1 不在数组中
  • 已添加 1
  • 2 不在数组中
  • 已添加 2
/**

第二次运行 **/

  • 1 在阵列中
  • 2 不在数组中
  • 已添加 2
/**

第三次运行 **/

  • 1 在阵列中
  • 2 在阵列中

我在这里做错了什么?

id in global 不用于检查数组中的元素。您需要改用.indexOf

> "1" in ["1","2"]
true
> "2" in ["1","2"]
false

property in object是检查对象中是否存在属性。

数组是 0 索引的,因此 "0" in ["1","2"]"1" in ["1", "2"] 是正确的,但不是 "2"

所以你需要改变

if(id in global)

if (global.indexOf(id) > -1)

注意:您需要一个不支持数组方法indexOf旧浏览器的垫片。