【问题标题】:Compare rising value and return max比较上升值并返回最大值
【发布时间】:2021-07-12 14:32:43
【问题描述】:

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

【问题讨论】:

  • 什么是msg.payload?它是一个数组还是只是一个数字?每次收到消息时都运行此代码吗?如果是这样,每次运行manMax都会被重置为0,所以设置为ManTime是没有用的。请说明您是如何调用此代码的。
  • @HereticMonkey 它在一个节点流中,因此每次有效负载更改时它都会运行,这只是一个数字。
  • 请提供样本输入和对应的预期输出。
  • @trincot 完成..

标签: javascript node.js arrays node-red


【解决方案1】:

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

【讨论】:

  • 我没有得到这样的输入,有效载荷是秒数,它不断上升,直到满足条件。所以每次运行代码我只得到 1 个数字。
  • 查看补充答案。
猜你喜欢
  • 2020-01-22
  • 2022-11-15
  • 1970-01-01
  • 2018-10-31
  • 2015-03-14
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
相关资源
最近更新 更多