0

我在 JavaScript 中有一个 4 位数字表示,代表一天中的 4 次(早上、下午、晚上、晚上)。

所以假设我有十进制的数字 13(1101),它表示必须在晚上、晚上和早上(而不是下午,因为第 2 位是 0)执行一些操作。

到目前为止,我所做的是获取代表白天的 4 位数字(1000 是晚上,0100 是晚上,0010 是下午,0001 是早上),我想做的是创建一个比较这两个数字的函数,如果某个位置的位等于 1,则返回 true。

我知道按位运算符,但我尝试使用它们但仍然没有运气。

4

2 回答 2

2

是的,按位计算。您可以使用简单的位掩码测试。

var PERIODS_OF_DAY = {
  MORNING: 1, AFTERNOON: 2, EVENING: 4, NIGHT: 8
};

var isPeriodOfDay = function(number, period) {
  return !!(number & period);
};

测试号码13

for (period in PERIODS_OF_DAY) {
    if(PERIODS_OF_DAY.hasOwnProperty(period)) {
        console.log(period + ":", isPeriodOfDay(13, PERIODS_OF_DAY[period]));
    }
}

MORNING: true
AFTERNOON: false
EVENING: true
NIGHT: true 
于 2013-03-23T19:18:32.033 回答
0
function getTimes (value, time) {
    var times = ["morning", "afternoon", "evening", "night"];

    if (time) {
        return !(~value & 1 << times.indexOf(time));
    }

    return times.filter(function(time, i) { return !(~value & 1 << i); });
}

console.log(getTimes(13, "afternoon")); // false
console.log(getTimes(13)); // ["morning", "evening", "night]

JSFiddle

于 2013-03-23T19:38:02.697 回答