『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5374|回复: 5

[教程系列] 笨办法实现,函数节点中2个16进制数组对比代码。

[复制链接]

6

主题

352

帖子

1333

积分

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
981
HASS币
0
发表于 2020-3-9 23:44:44 | 显示全部楼层 |阅读模式
本帖最后由 nisofer 于 2020-3-9 23:46 编辑

var array1 = [0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x75, 0x73, 0x72, 0x2E, 0x63, 0x6E];
var array2 = msg.payload;
var msgT = { payload:"true" };
var msgF = { payload:"false" };
if (!array2)
         return msgF;

if (array1.length != array2.length)
         return msgF;

for (var i = 0, l = array1.length; i < l; i++) {

         if (array1 instanceof Array && array2 instanceof Array) {

                 if (!array1.equals(array2))
                         return msgF;      
         }           
         else if (array1 != array2) {

                 return msgF;   
         }           
}      
return msgT;


回复

使用道具 举报

3

主题

321

帖子

2889

积分

论坛积极会员

积分
2889
金钱
2568
HASS币
10
发表于 2020-3-10 20:16:45 | 显示全部楼层
var array1 = [0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x75, 0x73, 0x72, 0x2E, 0x63, 0x6E];
var array2 = msg.payload;
var isequals = array1.length==array2.length&&Array.isArray(array2)?true:false;
for (let i = 0; i < array1.length; i++) {
    if(array1[i] != array2[i])isequals = false;        
}
return {"payload":isequals}
看你这个怪怪的,我就写了个,顺便自己练练手。
先时判断两者是否长度相等并且array2类型为array,然后再遍历一遍,确定两个数组的对应数值相等。最后return判断。
其实里面应该用break降低计算的浪费,但是这个比较简单应该也降低不到哪儿去,就精简行数了。
回复

使用道具 举报

6

主题

352

帖子

1333

积分

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
981
HASS币
0
 楼主| 发表于 2020-3-10 20:20:01 | 显示全部楼层
tcwj2008 发表于 2020-3-10 20:16
看你这个怪怪的,我就写了个,顺便自己练练手。
先时判断两者是否长度相等并且array2类型为array,然后再遍 ...

向大神学习!
回复

使用道具 举报

0

主题

15

帖子

714

积分

高级会员

Rank: 4

积分
714
金钱
699
HASS币
0
发表于 2020-11-6 20:57:51 | 显示全部楼层
去nodejs里找简单的比较函数
回复

使用道具 举报

0

主题

66

帖子

549

积分

高级会员

Rank: 4

积分
549
金钱
483
HASS币
0
发表于 2020-12-14 09:00:07 | 显示全部楼层
即然是比较两个数组是否一样,应该就不会处理每个字节,可能是判断串口接收缓存是否指定命令用的,我觉得这个转成字串判断最简单
if(arr1.toString("hex") == arr2.toString("hex"))
     msg.payload="相等"

回复

使用道具 举报

0

主题

66

帖子

549

积分

高级会员

Rank: 4

积分
549
金钱
483
HASS币
0
发表于 2020-12-14 09:01:22 | 显示全部楼层
用于判断串口接收是否是想要的数据并输出,用CASE
switch(msg.payload.toString("hex")){
    case "11223344" :
        msg.payload={"light":1}
        break
    case "44332211" :
        msg.payload={"light":0}
        break
    case "33333333" :
        msg.payload="其它命令"
        break
    default:
        msg.payload=null
        break
}
if(msg.payload)
    return msg;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 21:59 , Processed in 1.369618 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表