Javascript - 位警报消息 - 获取所有可能的组合

标签 javascript

我遇到的问题是我有一条以字节为单位的警报消息

示例: 1) 0000 0001 - 是警报 1 2) 0000 0010 - 是警报 2 3) 0000 1000 - 是警报 3 4) 1000 0000 - 是警报4

所以问题是,如果警报 1 和警报 4 同时出现,则字节如下所示: 1000 0001 如果是警报 1、2 和 4,则字节如下: 1000 0011 是否可以使用 JavaScript 函数获取警报的所有可能组合?

我知道只有 4 位,但这只是一个例子,我有一些全 8 位

提前谢谢

最佳答案

这样的事情可以通过“正常”位比较来获取所有位:

var val = 0b00000101;

function GetBits(val){
    var i = 1, res = [];
    while(i<=val){
        if(i & val) res.push(i);
        i <<=1;
    }
    return res;
}

console.log(GetBits(val));

但看起来好像使用了备用位掩码?

如果警报是数组中每个具有自定义掩码的对象,您可以使用过滤器:

var alarms = [
    {descr: 'Alarm 1', mask  : 1},
    {descr: 'Alarm 2', mask  : 2},
    {descr: 'Alarm 3', mask  : 0b1000},
    {descr: 'Alarm 4', mask  : 0b10000000}
    ];

var val = 0b10000011;

var alarmsInVal = alarms.filter(function(a){ return val & a.mask;});

console.log(alarmsInVal);

以及获取上述过滤值的字符串的示例:

var descr =  alarmsInVal.map(function(a){return a.descr;}).join(', '); //Alarm 1, Alarm 2, Alarm 4

关于Javascript - 位警报消息 - 获取所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226457/

相关文章:

javascript - 停止渲染或卡住指定 DOM 元素的 View

javascript - 从 Backbone.js 中的项目列表渲染项目

javascript - 一个函数中使用双重 setState 方法

javascript - 如何让一个Ember数据模型适合多种表单?

java - GWT 的托管模式不起作用

javascript - JQuery Mobile OSM div 自动设置为 0% 高度,即使我的 CSS 已将其设置为 100%

javascript - 使用 Firefox 调试基于 v8 的远程应用程序

javascript - 在 webGL 中记录 FPS

javascript - 如何在 diff 文本区域中显示 php 获取的值?

javascript - 如何在路由中呈现回调 JSON 响应