删除对象属性,仍然能够遍历该对象(Remove object property and still being able to loop through that object)

编程入门 行业动态 更新时间:2024-10-27 00:26:22
删除对象属性,仍然能够遍历该对象(Remove object property and still being able to loop through that object)

我正在尝试模拟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对象仍然是键/值存储的好选项,它支持删除对并循环遍历每个对

I'm trying to emulate 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(); })();

But I keep getting an error stating that jobs.interval[key] is undefined. So i guess delete doesn't exactly remove that property but simply assign it to undefined !?

What are my options for a key/value storage that support removal of pairs and looping through each of them?

EDIT

My bad!

there was a call to clearInterval in the function func(), so the line that was causing the error was jobs.interval[key].latest=now; Just after it's deletion.

So yeah, javascript objects are still good options for a key/value storage that support removal of pairs and looping through each of them

最满意答案

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

As mentioned in the question, this was a mistake!

更多推荐

本文发布于:2023-08-07 11:39:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1464189.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象   遍历   属性   Remove   property

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!