javascript - 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()
解决方案
保持最后 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();
推荐阅读
- reactjs - 无法读取未定义反应复选框过滤器的属性“包含”
- php - 在表单提交时增加 PHP 变量
- python - 修复积分器
- swift - UITableView 标题中的自定义视图重叠 UIViewController 视图
- adb - 在java的模拟器上执行adb shell时没有响应
- sql - SQL Survey db - db 的结构是否允许这样做?
- maven - 将位于 rar 文件中的资源添加到类路径
- qt - QT - 在层次结构中重命名文件后“没有规则来制作目标”
- publish-subscribe - Google pubsub 推送订阅“未注册”
- sql-server - 在多个(相同)位置花费的时间 - 窗口函数,也许?