首页 > 解决方案 > b 个更新中的最后一个更新是相同的

问题描述

我想知道在javascript中实现这一目标的有效方法是什么:

每秒我更新一个变量 X(开始时 X=0)更新只是 +1 或 -1。(X+=1 或 X-=1)

如果最近 7 次更新中有 5 次是负面的,我想采取行动。

函数检查应执行所需的计算以确定最后 5/7 更新是否为负。

我尝试使用数组在 incr() 上推送 +1,在 decr() 上推送 0 并计算最后 7 个元素的总和,但这根本没有效率。

let x = 0;

function start() {
  window.setInterval(() => {
    Math.round(Math.random()) ? incr() : decr();
  }, 1000)
}

function incr() {
  x += 1;
  check()
}

function decr() {
  x -= 1;
  check()
}

function check() {
  console.log(x);
}

start()

标签: javascript

解决方案


保持最后 7 个数字作为滑动窗口。用于Math.sign决定 -1 或 1。

const win = [];

function start() {
  window.setInterval(() => {
    const value = Math.sign(Math.random() - 0.5);
    win.push(value);
    if (win.length > 7) {
      win.shift();
    }
    check();
  }, 1000);
}

function check() {
  const criteria = win.filter((x) => x === -1).length >= 5;
  criteria && console.log("Yeah, last 5/7 are negatives");
  
  console.log('Last 7: ', win.join(''));
}

start();


推荐阅读