简体   繁体   English

数组推送第一次不起作用

[英]Array push doesnt work the first time

I have the following code to run a function every second 我有以下代码每秒运行一个函数

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);
        }
    }
}

Im using it to keep the global variable updated but without duplicates. 我用它来保持全局变量更新,但没有重复。 However, when the script runs, the second id is said to be added in the first run but it is not really added as i get the following output: 但是,当脚本运行时,第二个ID据说是在第一次运行中添加的,但由于我得到以下输出,因此它并不是真正添加的:

/** FIRST RUN **/ /** 首轮 **/

  • 1 not in array 1个不在阵列中
  • 1 added 新增1个
  • 2 not in array 2不在阵列中
  • 2 added 已添加2

/** SECOND RUN **/ / **第二次运行** /

  • 1 in array 阵列1个
  • 2 not in array 2不在阵列中
  • 2 added 已添加2

/** THIRD RUN **/ / **第三次运行** /

  • 1 in array 阵列1个
  • 2 in array 2个数组

What am i doing wrong here? 我在这里做错了什么?

id in global is not used to check an element in an array. id in global不用于检查数组中的元素。 You need to use .indexOf instead. 您需要改用.indexOf

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

property in object is to check whether an property exist in an object. property in object中的属性是检查property in object中是否存在属性。

Array is 0-indexed, so "0" in ["1","2"] and "1" in ["1", "2"] would be true, but not "2" . 数组是0索引的,因此"0" in ["1","2"] "1" in ["1", "2"]为true,但不是"2"

So you need to change 所以你需要改变

if(id in global)

to

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

Note: You need a shim for old browsers which doesn't support indexOf method of array. 注意:对于旧的浏览器,您需要一个垫片,它不支持array的indexOf方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM