javascript - 数组推送第一次不起作用

标签 javascript arrays

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

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 已添加<​​/li>
  • 2 不在数组中
  • 2 已添加<​​/li>

/** 第二次运行 **/

  • 数组中的 1
  • 2 不在数组中
  • 2 已添加<​​/li>

/** 第三轮 **/

  • 数组中的 1
  • 2 个数组

我做错了什么?

最佳答案

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

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

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

数组是从 0 开始索引的,所以 ["1","2"] 中的 "0"["1", "2"] 中的“1” 会是真的,但不是 "2"

所以你需要改变

if(id in global)

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

注意:对于不支持 indexOf 数组方法的旧浏览器,您需要一个 shim。

关于javascript - 数组推送第一次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738079/

相关文章:

javascript - Jquery 选择器仅在第一次在下拉列表中起作用

javascript - 使用 jQuery .attr() 方法获取元素属性

javascript - http get 请求的 Node json 错误

arrays - 不使用 Compare-Object 对 If 语句的结果进行排序

java - 使用数组作为方法 (Java)

c# - C#返回类数组中单个变量的数组

javascript - 在 vee validate 内的正则表达式中转义单引号和双引号

javascript - 我可以混淆 PHP 函数调用吗

php - 序列化数组中的mysql选择查询

java - 如何找到总和等于或小于给定数字的元组数?