【问题标题】:node red array / how to "use" specific place节点红色数组/如何“使用”特定位置
【发布时间】:2016-01-10 07:58:51
【问题描述】:

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

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

使用“json”,然后使用“stringsplit”,我得到了一个 f.e. 数组。 9 个值: 数组 [9](最多可包含 80 对值)!

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

现在我想要一个函数节点,它将主题 (mqtt/1/) 中的值 (-127.00) 与主题 (mqtt/0/) 中的值 (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,然后将其按此顺序保存在数组中???

提前谢谢你!

【问题讨论】:

  • 这不可能是 Java。 Java 不使用var。 JavaScript 可以,但即便如此,我也不是 100% 清楚你在问什么。
  • 使用.indexOf("mqtt/1/").indexOf("mqtt/0/") 检查是否有效?
  • 是的,它确实适用于.indexOf("mqtt/1/")!是否可以不查看整个主题,例如“mqtt/1/”,而只查看主题中的一个数字/一个单词,例如“1”或“mqtt”??
  • 然后做.split("/"),第0个元素是单词,第1个是数字。
  • 所以它会是一个数组中的数组?

标签: javascript arrays node-red


【解决方案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节点传递给对象。

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

【讨论】:

  • 谢谢。据我所知,只有当它们是 GLOBAL 或 2 个值在“同一时间”进入节点时,节点才能比较值。因此,我有 2 个值,包括。在“收集器”节点中出现的主题,两个值都将作为对象发送->下一个节点是带有var arr = []; for (var k in msg.payload) {arr.push([k]); arr.push(msg.payload[k]);} var msg={payload: arr} return msg;的函数,所以我收到一个数组,然后我必须用parse.Float (msg.payload[1]等解析它。但是它IS NOT ELLEGANT :-( 那么处理 OBJECT 并从中获取值的更好方法是什么?
  • 或更好...比较值的更好方法是什么,这些值不会同时出现并且必须在节点中存储/缓冲直到下一个/第二个值出现?跨度>
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 2019-10-08
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多