javascript - 显示上一分钟可变数字的函数

标签 javascript node.js

我正在尝试创建一个函数,它只会保留过去一分钟的变量计数。 例如,如果我调用函数 count 100 次,如果这些调用中有 60 次来自过去一分钟,它只会返回 60,而不是 100。

这是我迄今为止尝试过的方法,将变量设为数组并在每次调用时向其添加数字,但我不知道如何在一分钟过去后删除计数。

var count = 1;
var countArray = [];

更新: 我已经用这个更新了我的代码,但是数组元素没有按预期删除,

function Count() {
  var jNow = new Date();
  jCountArray.push(jNow);
  for (var i = 0; i <= jCountArray.length; i++) {
    var secondsDiff = (new Date(jNow).getTime() - new Date(jCountArray[i]).getTime()) / 1000;
    if (secondsDiff >= 10) { jCountArray.shift(); }
  }
  console.log(jCountArray);
  return jCountArray.length;
}

最佳答案

如果我正确理解您的要求,并且您唯一需要 Count 做的就是返回它在最后一分钟被调用的次数,我认为我们可以利用 setTimeout 做一些相对容易的事情:

function getCounter() {
  let count = 0;
  let duration = 60000;
  return function () {
    count = count + 1;
    setTimeout(function () {
      count = count - 1;
    }, duration);
    return count;
  }
}

let counter = getCounter();

function count() {
  console.log(counter());
}
<button onclick="count()">Count</button>

这里唯一的技巧是,要使实际的 count 保持私有(private),我们需要一个工厂函数将其包装在一个闭包中。如果这不重要,您可以将其编写为一个简单的函数并将计数保留在父作用域中。此外,出于测试目的,您可以将 duration 更改为较低的毫秒数以查看其运行情况。

关于javascript - 显示上一分钟可变数字的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58459915/

相关文章:

javascript - 使用 GLTFLoader : RangeError: Invalid typed array length: 4 加载 gltf 文件时出错

javascript - 从数组中删除字符串

node.js - 使用覆盖的全局接口(interface)运行 mocha 测试时 tsconfig.json 编译问题

node.js - 我收到错误 Gmail API 需要收件人地址

node.js - 无法连接到 Twilio : open failed

node.js - 使用 Node 处理 XMPP 存在

javascript - 如何动态地将 Angular Directive(指令)分配给div?

javascript - 使用变量访问带连字符的属性

javascript - 在 NodeJS 中迭代字符串行

javascript - 无法发布到 node.js - 从 angularjs 表达