我正在尝试制作一个仅保留过去一分钟的变量计数的函数。
例如,如果我调用函数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私有,我们需要一个工厂函数将其包装在闭包中。如果那不重要,则可以将其编写为简单函数并将计数保留在父范围内。另外,出于测试目的,您可以将duration更改为较低的毫秒数以查看其运行情况。

10-08 00:33