首页 > 解决方案 > 比较上升值并返回最大值

问题描述

我有一个可以计数到一个数字的有效负载,当该字段中的某些东西击中它时,它会重置为零并再次开始计数。我正在尝试在重置之前捕获并返回最大数量。由于外部限制,我并不总是看到 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

标签: javascriptnode.jsarraysnode-red

解决方案


对于这个任务,我将首先提取所有这些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);


推荐阅读