哪个 javascript 函数会 return 数组中低于阈值的值的数量

Which javascript function would return the number of values under a threshold in an array

我有一个 processAverage 函数,该函数 returns 通过对从已连接设备发送的两个值进行平均来得到一个值 Z。如果此值 Z 低于阈值 (this.limitZ),则会在服务器上触发警报。

但是,我认为警报发送得太快了,我想用一个函数来减慢它的速度,该函数仅当返回的值在最后 10 个方程中低于阈值 limitZ 5 次时才发送警报processAverage.

这是我到目前为止想出的。首先,我将 processAverage 的最后 10 个结果保存在一个滑动数组中:

const delimiter = '\n'
const eValues = []
const elmt = []

this.limitZ = 45
const z = this.processAverage(e1, e3)
const i = 0;
do
{i += 1
elmt.push (z)
}
while (i < 10)

现在,我必须编写一个函数 returns 数组中所有低于阈值 this.limitZ 的值。

例如

var filtered = items.filter(function(item) {
  return item < this.limitZ;
});
console.log(filtered);

count(filtered) {
  const =filtered;
  return 
}

然后我需要一个函数,当此函数过滤的长度超过 5 项时,它会发出警报。它可能看起来像:

 if (filtered.length > 5) {
          this.emit('alert', msg)

但是,我不确定如何正确编写它并让这些函数协同工作,因为我不了解 JS,我尝试的所有内容 运行 都告诉我变量存在问题,但我我还确定有一种更简单的方法可以在数组中的 5 个值低于阈值时触发警报,对吗?

提前致谢

您的“滑动数组”没有完全正确地实现,因为一旦其中包含第一个 z 值的 10 个副本,它就会停止推送到数组。

这是一个正确的实现。为了演示目的,我已经用一个随机整数替换了你的 Z,for 循环只是为了显示它只填充并保留最后 10 个数字。实际上,您不会使用循环,而是每次获得新的 Z 值时都会推送到数组。 (例如,这可以使用每 N 毫秒触发一次的间隔来完成)。

function randomNumber(){ return Math.floor(Math.random() * 10);}

var arr = [];
let capacity = 10;
for(let i = 0; i < 15; i++)
{
  let z = randomNumber();
  if(arr.length == capacity)
    arr.splice(0, 1);
  arr.push(z);
}

console.log(arr);

第二部分是获取arr中小于阈值的元素个数。我将使用 5 作为阈值。不要让 lambda 函数吓到你。它与 function(e){return e < threshold}

基本相同
let threshold = 5;
let filtered = arr.filter(e => e <= threshold);
//filtered.length contains the number of elements below the threshold

function randomNumber(){ return Math.floor(Math.random() * 10);}

var arr = [];
let capacity = 10;
for(let i = 0; i < 15; i++)
{
  let z = randomNumber();
  if(arr.length == capacity)
    arr.splice(0, 1);
  arr.push(z);
}

console.log(arr);

let threshold = 5;
let filtered = arr.filter(e => e <= threshold);

console.log(filtered);
console.log(filtered.length);

然后最后你可以使用 filtered.length 在值的数量大于 5 时发出。你可以 运行 这个片段几次直到你看到它在值大于 5 时都发出小于 5,当值为 5 或更小时不发射。

if(filtered.length > 5)
    this.emit(...);

function randomNumber(){ return Math.floor(Math.random() * 10);}

var arr = [];
let capacity = 10;
for(let i = 0; i < 15; i++)
{
  let z = randomNumber();
  if(arr.length == capacity)
    arr.splice(0, 1);
  arr.push(z);
}

console.log(arr);

let threshold = 5;
let filtered = arr.filter(e => e <= threshold);

console.log(filtered);
console.log(filtered.length);

if(filtered.length > 5)
  console.log("EMIT");