我在JavaScript中有一个4位数字表示,代表一天中的4次(早上,下午,晚上,晚上)。
所以我说我的数字是十进制的13(1101),它表示必须在夜晚,晚上和早上完成一些动作(而不是下午,因为第二位是0)。
到目前为止我所做的是得到代表当天的4位数字(1000是夜晚,0100是晚上,0010是下午,0001是早晨),我想要做的是创建一个比较2个数字,如果某个位置的位等于1,则返回true。
我知道按位运算符,但我尝试使用它们但仍然没有运气。
答案 0 :(得分: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
答案 1 :(得分: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]