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 ] ) );
实际上,这是slice
和split
的一个问题。
下面的代码:
var th = str.slice(0, -1); th = th.split(",");
应改为:
var th = str.slice(1,-1).split(', ')
如果.slice()
的第一个参数是0
,结果string将以“(”,最终引入TypeError
。