javascript - 比较上升值并返回最大值
问题描述
我有一个可以计数到一个数字的有效负载,当该字段中的某些东西击中它时,它会重置为零并再次开始计数。我正在尝试在重置之前捕获并返回最大数量。由于外部限制,我并不总是看到 0,所以我不能使用它。
ManTime = msg.payload;
var ManArr = [];
var manMax;
if (ManTime < manMax) {
ManArr.unshift(ManMax)
manMax = 0;
} else {
manMax = ManTime
}
msg = {
ManMax: manMax,
ManTime: ManTime,
ManArr: ManArr
}
我希望这样做是将当前读数与上次读数进行比较,如果它较低,则将旧读数添加到数组中。
这是一个节点流,因此每次有效负载更改时都会运行代码,这只是一个数字
示例输入:1、2、3、4、5、1、2、3、4、1、2、3、0、1
预期输出:5、4、3
解决方案
对于这个任务,我将首先提取所有这些payload
属性值,以便获得一个简单的数字数组。
然后用于filter
查找大于其后的条目(如果有)的条目:
let messages = [
{payload: 1}, {payload: 2}, {payload: 3}, {payload: 4}, { payload: 5 },
{payload: 1}, {payload: 2}, {payload: 3}, {payload: 4},
{payload: 1}, {payload: 2}, {payload: 3},
{payload: 0}, {payload: 1}
];
let numbers = messages.map(({payload}) => payload);
let result = numbers.filter((payload, i) => payload > numbers[i+1]);
console.log(result);
如果你一一得到输入,那么:
class Processor {
constructor() {
this.lastPayload = NaN;
this.peeks = [];
}
process(msg) {
if (msg.payload < this.lastPayload) {
this.peeks.push(this.lastPayload);
}
this.lastPayload = msg.payload;
}
}
// simulate arrival of messages:
let messages = [
{payload: 1}, {payload: 2}, {payload: 3}, {payload: 4}, { payload: 5 },
{payload: 1}, {payload: 2}, {payload: 3}, {payload: 4},
{payload: 1}, {payload: 2}, {payload: 3},
{payload: 0}, {payload: 1}
];
let processor = new Processor;
for (let msg of messages) processor.process(msg);
console.log(processor.peeks);
推荐阅读
- html - 除非使用开发人员工具,否则网站无法正确缩放
- scala - 在 Apache Spark (v2.3.1) 的 UDF 中使用 Word2Vec 函数
- javascript - Sweetalert 2 同时选择下拉菜单和文本区域
- jenkins - 在 Jenkins 工作区中有 2 个目录
- matlab - 如何在matlab中将图像与内核/滤波器相乘
- c# - 复制列表对象 C#
- r - pdftools:在字符串中嵌入 NUL
- javascript - 在javascript的替换中渲染vue模板
- django - orm中的join怎么写
- node.js - 如何使用云功能循环“推送”到 Firebase 数据库