【问题标题】:Which javascript function would return the number of values under a threshold in an array哪个javascript函数将返回数组中阈值以下的值的数量
【发布时间】:2021-10-30 18:18:01
【问题描述】:

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

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

这是我到目前为止想出的。首先,我将 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)

现在,我必须编写一个函数,返回数组中低于阈值 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 个值低于阈值时触发警报的更简单方法,对吧?

提前致谢

【问题讨论】:

标签: javascript arrays count threshold


【解决方案1】:

您的“滑动数组”没有完全正确实现,因为一旦其中包含第一个 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 &lt; 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 时发出。你可以运行这个 sn-p 几次,直到你看到它在值大于 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");

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2016-11-25
    相关资源
    最近更新 更多