节点红色数组/如何“使用”特定的地方

时间:2016-01-10 07:58:51

标签: javascript arrays node-red

在节点红色中我使用“收集器”收集值,当收集其中一个时,收集器向我发送一个包含所有值对的“对象”:

{ "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }

用“json”和“stringsplit”之后我得到了一个f.e数组。 9个值: array [9](最多可以有80对值)!

[ "{", "mqtt/1/", ":", "-127.00", ",", "mqtt/0/", ":", "41.61", "}" ]

现在我想要一个函数节点,它将Topic(mqtt / 1 /)中的Value(-127.00)与Topic(mqtt / 0 /)中的Value(41.61)进行比较。 这个我工作......但是只有当我知道哪个是第一个主题/值,哪个是第二个......

var outputMsgs = msg.payload;
var top1=outputMsgs[1];
var val1=outputMsgs[3];
var top2=outputMsgs[5];
var val2=outputMsgs[7];
msg = {payload: val1}
var msg2 = {payload: val2}
if (val1>val2)
{var msgOUT={payload: "BIGGER"};}
return [msg, msg2, msgOUT];

但问题是,有时“mqtt / 1 /”首先出现,有时是“mqtt / 0 /”并且值会被切换。所以现在,也许有人可以帮助编写一个函数,用正确的主题选择正确的值,以便在下一步中对它们进行比较。

如果主题包含0,1 ... 80,然后按顺序将其保存在数组中,可能有一种方法可以查看???

提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果初始msg.payload确实是您描述的javascript对象,即:

msg.payload = { "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }

然后您可以将这两个值引用为:

var value1 = msg.payload["mqtt/1/"];
var value1 = msg.payload["mqtt/2/"];

如果msg.payload实际是JSON字符串,则首先通过JSON节点传递消息,然后将其转换为对象。

无需尝试自己拆分字符串并解析内容。