我在 JavaScript 中有一个 4 位数字表示,代表一天中的 4 次(早上、下午、晚上、晚上)。
所以假设我有十进制的数字 13(1101),它表示必须在晚上、晚上和早上(而不是下午,因为第 2 位是 0)执行一些操作。
到目前为止,我所做的是获取代表白天的 4 位数字(1000 是晚上,0100 是晚上,0010 是下午,0001 是早上),我想做的是创建一个比较这两个数字的函数,如果某个位置的位等于 1,则返回 true。
我知道按位运算符,但我尝试使用它们但仍然没有运气。
我在 JavaScript 中有一个 4 位数字表示,代表一天中的 4 次(早上、下午、晚上、晚上)。
所以假设我有十进制的数字 13(1101),它表示必须在晚上、晚上和早上(而不是下午,因为第 2 位是 0)执行一些操作。
到目前为止,我所做的是获取代表白天的 4 位数字(1000 是晚上,0100 是晚上,0010 是下午,0001 是早上),我想做的是创建一个比较这两个数字的函数,如果某个位置的位等于 1,则返回 true。
我知道按位运算符,但我尝试使用它们但仍然没有运气。
是的,按位计算。您可以使用简单的位掩码测试。
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
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]