【问题标题】:How to auto remove elements out of an array after X minute(s) in JavaScript?如何在 JavaScript 中 X 分钟后自动从数组中删除元素?
【发布时间】:2018-04-27 16:05:26
【问题描述】:

我不知道这是不是一个愚蠢的想法。但是假设我有一个数组,我不断向它推送新元素。而且我想设置逻辑,以便将存在 5 分钟的任何元素自动从该数组中删除。

有解决方案的想法吗?

请注意,我不想保留任何元素的时间戳,我希望它们被自动删除。

【问题讨论】:

  • 听起来你在自找麻烦,数组元素是通过它的索引访问的,所以如果你有const myArray = ["Hello","World"] 和myArray[0] 将是“你好”。但 5 分钟后,myArray[0] 将是“World”或未定义如果“World”也被删除。
  • 没有内置方法,您需要存储时间戳才能知道元素何时达到 5 分钟。所以在目前的状态下,这个问题是无法回答的。
  • 你愿意使用redis来实现这个功能吗?
  • Stackoverflow 并非旨在成为集思广益的讨论区。您应该已经做出了设计选择,但如果您对特定实现子集有特定问题,请在Minimal, Complete, and Verifiable example 中发布您的代码,我们可以帮助您解决任何问题。
  • 好的,谢谢大家,我还是照旧吧~

标签: javascript arrays


【解决方案1】:

您可以创建自己的数组类,每次推送元素时都会将setTimeout 删除。这里我们每秒推送一个新元素,它们会在 5 秒内自动删除(不移动剩余元素)。

class MyArray extends Array {
  push() {
    const i1 = this.length;
    const i2 = super.push(...arguments);
    setTimeout(() => {
      for (let i=i1; i<i2; i++) delete this[i];
    },5000);
    return i2;
  }
}

let a = new MyArray();
let i = 0;

let t1 = setInterval(() => { a.push(i++); console.log(a); }, 1000);
setTimeout(() => {
  clearInterval(t1);
}, 60000)

【讨论】:

    【解决方案2】:

    您可以创建 setInterval 来清除项目,并在将项目添加到数组时添加添加时间。

    var array = [];
    
    function push(function(value) {
       array.push({
          value: value,
          time: Date.now()
       });
    }
    
    setInterval(function() {
      var time = Date.now();
      array = array.filter(function(item) {
         return time < item.time + (5000 * 60);
      }); 
    }, 500);
    

    【讨论】:

    • 谢谢,我去看看。
    【解决方案3】:

    您可以将您的元素建模为一个对象,除了它的值之外,它还有一个时间戳属性。

    您可以使用 setInterval 调用一个方法,比如说 100 毫秒,以检查是否根据当前时间戳从数组中删除对象。

    【讨论】:

    • 您好,所以您的想法就像上面的人一样,我不明白为什么要投反对票,但还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-12-26
    • 2011-01-01
    • 2015-10-28
    • 2011-03-14
    • 2022-11-03
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多