我有以下代码每秒运行一个函数
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/