2017-02-08 50 views
0

我使用节点红和我有以下传入msg.payload:通过循环数组和解析

[ "=00ECY20WA200_RECV_P1SEL", "true", "=00ECY20WA200_RECV_P2SEL", "true", "=00ECY20WA300_RECV_P2SEL", "true", "=00ECY20WA300_RECV_P1SEL", "true", "=00ECY20WA202_RECV_P1SEL", "true", "=00ECY20WA202_RECV_P2SEL", "false", "=00ECY20WA303_RECV_P2SEL", "true", "=00ECY20WA303_RECV_P1SEL", "true", "=00ECY20WA204_RECV_P1SEL", "false", "=00ECY20WA204_RECV_P2SEL", "true", "=00ECY20WA305_RECV_P2SEL", "false", "=00ECY20WA305_RECV_P1SEL", "false", "=00ECY20WA205_RECV_P1SEL", "false", "=00ECY20WA205_RECV_P2SEL", "false", "=00ECY20WA306_RECV_P1SEL", "true", "=00ECY20WA306_RECV_P2SEL", "true", "=00ECY20WA206_RECV_P1SEL", "false", "=00ECY20WA206_RECV_P2SEL", "true", "=00ECY20WA307_RECV_P1SEL", "true", "=00ECY20WA307_RECV_P2SEL", "true", "=00ECY20WA207_RECV_P1SEL", "false", "=00ECY20WA207_RECV_P2SEL", "false", "=00ECY20WA308_RECV_P1SEL", "false", "=00ECY20WA308_RECV_P2SEL", "true", "=00ECY20WA208_RECV_P1SEL", "false" ] 

我试图解析所有这些都是“真”的项目,将它们连接起来在数组(recievingAlarms)中,解析的项目位于布尔运算符之前。我试图用for循环来做到这一点,我很确定我创建了一个无限循环,我不知道如何纠正它。这里是我有:

​​
+5

代替'1 + 2'使用'I + = 2'。将条件'msg.payload [i] === true'改为'msg.payload [i] == true',因为'“true”'是一个字符串或者与字符串“true”比较而不是布尔值true '。还有'recievingAlarms = recievingAlarms.concat(msg.payload [i-1]);' – RaR

+0

甚至'msg.payload [i] ==='true'' –

回答

1

这是您的解决方案

var recievingAlarms = []; 

for (i = 1; i < msg.payload.length; i=i+2) 
    if(msg.payload[i] == "true") { 
     recievingAlarms=recievingAlarms.concat(msg.payload[i-1]); 
    } 
msg.payload = recievingAlarms; 
return msg; 
3

你的循环是无限的,因为现在你是不是递增i,递增i你需要用i += 2更换i+2,在责令重新分配自己的价值:

var receivingAlarms = []; 

for (var i = 1; i < msg.payload.length; i += 2) { 
    if(msg.payload[i] === "true") { //replace true with "true" 
    receivingAlarms.push(msg.payload[i-1]); //replace concat with push because msg.payload[i - 1] is not an Array 
    } 
} 

msg.payload = receivingAlarms; 
return msg; 

你也需要改变.concat().push() - .concat()用于合并/组合两个数组,但msg.payload[i-1]的结果不是数组。此外,需要修改true的条件检查以检查字符串"true",因为有效内容数组中的值是字符串非布尔值。

+0

有一个小错字:忘记打开大括号'''为''身体! –

+0

啊谢谢!将更新 – hackerrdave

1
  1. i没有被增加,因此该循环的条件永远不会计算为假(i将总是比.length少)。
  2. "true"true不是同一类型(一个是字符串,另一个是布尔值)。改为比较msg.payLoad[i]"true"
  3. concat连接两个数组。使用push将新项目添加到阵列。

这样的:

var recievingAlarms = []; 

for (i = 1; i < msg.payload.length; i += 2) 
    if(msg.payload[i] === "true") 
     recievingAlarms.push(msg.payload[i - 1]); 

msg.payload = recievingAlarms;