我有以下代码每秒运行一个函数
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来保持全局变量更新,但没有重复.但是,当脚本运行时,第二个id被称为在第一次运行时添加,但它没有真正添加,因为我得到以下输出:
/**第一次运行**/
/**第二次运行**/
/**第三次运行**/
我在这做错了什么?
id in global不用于检查数组中的元素.你需要.indexOf改用.
> "1" in ["1","2"]
true
> "2" in ["1","2"]
false
Run Code Online (Sandbox Code Playgroud)
property in object 是检查对象中是否存在属性.
数组是0索引的,所以"0" in ["1","2"]并且"1" in ["1", "2"]是真的,但不是"2".
所以你需要改变
if(id in global)
Run Code Online (Sandbox Code Playgroud)
至
if (global.indexOf(id) > -1)
Run Code Online (Sandbox Code Playgroud)
注意:对于不支持indexOf数组方法的旧浏览器,您需要一个垫片.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |