我正在尝试模拟setInterval:
var Animator=new (function(){
var jobs={
interval:{}
}
var self=this;
var assignedIntervalNum=0;
this.setInterval=function(func,interval){
jobs.interval[assignedIntervalNum]={
func:func,
latest:Date.now()-interval,
interval:interval
};
assignedIntervalNum++;
return assignedIntervalNum-1;
}
this.clearInterval=function(key){
delete jobs.interval[key];
}
var requestNextFrame=function(){
var now=Date.now();
for (var key in jobs.interval){
if (jobs.interval[key].latest + jobs.interval[key].interval < now){
jobs.interval[key].func();
jobs.interval[key].latest=now;
}
}
setTimeout(function(){requestNextFrame();},1);
}
requestNextFrame();
})();
但是我一直收到错误声明jobs.interval [key]未定义。所以我想删除不会完全删除该属性,只需将其分配给undefined
!?
对于支持删除对并循环遍历每个对的键/值存储,我有哪些选择?
修改
我的坏!
在函数func()中调用了clearInterval,因此导致错误的行是jobs.interval [key] .latest = now;在它被删除之后。
所以是的,javascript对象仍然是支持删除对并循环遍历每个对的键/值存储的好选择
答案 0 :(得分:0)
“delete”不会从数组中删除对象,它会将对象设置为undefined,这就是您收到该错误的原因。
如果要从具有索引i的数组中删除对象,可以使用:
array.splice(i, 1);
其中1是您要从位置i开始删除的元素数。
如果要通过键从数组“array”中删除一个元素,可以使用:
for (var i=0; i<array.length; i++){
if (array[i]==key){
array.splice(i, 1);
break;
}
}
答案 1 :(得分:0)
正如问题所述,这是一个错误!