我在一个侧面项目中学习处理位值中的东西。我不确定我在做什么是否正确。
我有一个对象,其中包含一个位值列表:
const bitVal = {
food_item_1: 0x04,
food_item_2: 0x08,
food_item_3: 0x40
}
以此类推。
我有一个操作,当用户选择食物组合时,它将像这样将这些值加在一起
bitValue.food_item_1 | bitValue.food_item_3
然后将其保存在数据库中。
我的问题是,当我再将位值取回来时。我如何找出由什么项目组成的位数?
因此,食品1和食品2 = 68
。基于此,当我得到68
从数据库返回时,我如何确定使用了两个或三个(可以有两个以上,示例仅为两个)?
我的第一次尝试是一个对bitValue
对象中的所有值进行迭代并计算每个值并查看其是否等于数据库中值的函数。
问题在这里。如果我在该位字段中有10个左右的值,那么要进行大量计算才能得出结论。
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
您可以迭代这些值,并对合并后的值进行按位与运算,以进行真实性检查。
const
bitVal = { food_item_1: 0x04, food_item_2: 0x08, food_item_3: 0x40 },
value = 68;
Object.entries(bitVal).forEach(([k, v]) => {
if (v & value) {
console.log(k);
}
});