JS切片,分割和parsing

我有一个树莓派零外面与DH22温度/湿度传感器。 这个传感器通过UDP传递读数,由NodeRed中的UDPinput节点接收。

来自传感器的数据是一个string,格式如下:

"(64.4000015258789, 14.899999618530273)" 

我对JS没有多less经验,但是从NodeRed开始,我学到了很多东西。 传递给函数的消息被描述为:“消息作为一个名为msg的JavaScript对象被传入,按照惯例它将有一个包含消息体的msg.payload属性。 经过多次尝试和错误,这是我认为应该工作的代码 – 但它不…

 var str = msg.payload; var th = str.slice(0, -1); th = th.split(","); msg.payload[0] = parseFloat(th[0]); msg.payload[1] = parseFloat(th[1]); return [ msg.payload[0], msg.payload[1] ]; 

但是,我得到这个错误:

 "TypeError: Cannot assign to read only property '_msgid' of (" 

从错误消息看来,我试图给msg.payload(msg.payload [0])的第一个字符赋值 – 在这种情况下是字符“(”。我有点comfused。

编辑:在NodeRed我正在使用一个function节点与两个输出。 所以上面提到的inputstring应该被剥离,拆分和parsing为float,然后返回到每个输出。 要将数据发送到两个不同的输出,您需要:

 return [ data1, data2 ] 

Data1输出1,data2输出2。

内联使用replace()split()

 var payload = "(64.4000015258789, 14.899999618530273)"; // remove the parentheses and split the remainder into an array var arr = payload.replace( /[\(\)]/g, "" ).split( /\s*,\s*/ ); console.log( parseFloat( arr[ 0 ] ) ); console.log( parseFloat( arr[ 1 ] ) ); 

实际上,这是slicesplit的一个问题。

下面的代码:

 var th = str.slice(0, -1); th = th.split(","); 

应改为:

 var th = str.slice(1,-1).split(', ') 

如果.slice()的第一个参数是0 ,结果string将以“(”,最终引入TypeError