【问题标题】:the correct way to delete object in an array for node.js?删除node.js数组中对象的正确方法?
【发布时间】:2025-11-27 11:00:02
【问题描述】:

我写了一个定期删除对象的函数。

function add(variable, expireSecond){
    this.list[variable] = {"expireSecond": expireSecond, "addTime": (new Date().getTime()) / 1000};
}

function deleteExpiredObject(){
    var currentTime = (new Date().getTime()) / 1000;
    for (var key in this.list) {
        var item = this.list[key];
        if (item.expireSecond + item.addTime < currentTime){
            delete this.list[key];
        }
    }
}

当我使用它时,我尝试了以下操作:

add(xxx[1], 300);

但是当我调用deleteExpiredObject()时,对象过期后似乎内存不是空闲的。是因为xxx[1] 中对象的非零引用吗?怎么解决?有没有我可以使用的库?

谢谢!

【问题讨论】:

  • 我收集this.list 是一个对象?似乎您使用数据结构跟踪项目,然后仅删除跟踪结构。你可能想要这个接口set(name, value, expiryTime), var value = get(name)

标签: javascript node.js garbage-collection


【解决方案1】:

这更像是一个 Javascript 问题,而不是直接与 node.js 相关。 Javascript 中的删除用于从对象中删除属性。如果该属性引用了一个对象,则该对象不会被删除,但如果不再有对它的引用,则应该在下一个垃圾回收周期中清理它。

这里还有一些与 Javascript 和 delete 关键字相关的问题,您可能会觉得有用:

`new` without `delete` on same variable in Javascript

When should I use delete vs setting elements to null in JavaScript?(作为骗子关闭,但有很好的答案)

Deleting Objects in JavaScript

【讨论】:

  • 感谢您的回答。我相信我的代码是有效的,但是似乎nodejs的进程占用越来越多的ram,所以我怀疑它是否是这样做的标准方式。