javascript - 如何检测 Node.js 中的键序列以执行某些操作

标签 javascript node.js

我有一个 RFID 阅读器,它会在扫描卡时发送一系列击键。我正在使用 iohook监听按键并在按键序列被按下时执行一些操作。

确切的顺序是这样的

2
1
5
9
4
5
8
1
0
5
5
enter

问题是我不知道如何检查这个序列。 在此序列之前和之后还有其他按键被按下。 我尝试将每个按键都添加到一个数组中,但后来我的数组变得非常大,我不知道在什么时候应该清除我的数组。

到目前为止,这是我的代码
const ioHook = require('iohook')
let keys_pressed = []

ioHook.on("keydown", event => {
  keys_pressed.push(event)
  console.log(keys_pressed)
})

ioHook.start()

最佳答案

假设您想在输入后立即检测正确的序列,您可以使用 keys_pressed数组始终具有相同的长度(这是您正在寻找的序列的长度) - 您不需要在内存中保留更多的元素。每次击键,删除最旧的元素并添加最新的元素,并查看最后按下的顺序是否与您要查找的顺序相同

const ioHook = require('iohook')

const predefinedSequence = ['2', '1', '5', '9', '4', '5', '8', '1', '0', '5', '5', 'enter']

const compareSequences = (seq1, seq2) => {
  if (seq1.length !== seq2.length) return false
  for (let i = 0; i < seq1.length; i++) {
    if (seq1[i] !== seq2[i]) return false
  }
  return true
}

// create keys_pressed array of the same length as predefinedSequence
const keys_pressed = new Array(predefinedSequence.length)

ioHook.on("keydown", event => {
  keys_pressed.shift() // remove the oldest item from the start of the array
  keys_pressed.push(event) // push the newest item to the end
  if (compareSequences(predefinedSequence, keys_pressed)) {
    console.log('sequence detected')
  }
})

ioHook.start()

关于javascript - 如何检测 Node.js 中的键序列以执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59824487/

相关文章:

javascript - ReactJS - .JS 与 .JSX

javascript - 单击 <select> 但未选择任何选项后会触发什么事件?

javascript - mongodb 用户配置文件添加输入时遇到问题

node.js - Express 中的 URL 作为参数

javascript - 垃圾收集器破坏 WebGL 页面性能

javascript - 在 html5 Canvas 中选择并更改线条的颜色?

javascript - 如何使用 jquery 删除提交按钮的悬停属性?

node.js - 查看依赖包 X 的本地 NPM 包

node.js - 向 qnamaker 机器人添加对话框的最有效方法

Node.js winston 日志记录