用位运算来将多个数据保存到一个数字里
在一个应用/网站里,通常有很多个开关选项,需要在客户端和用户之间来回传送, 在query里大概会变成这样
https://xxxxx.com/?option1=on&option2=off&option3=on&option4=off&option5=on
想象一下上面的选项如果并列排起来,on变为1,off变为2,那么会得到一个二进制的数字10101
,然后将这个二进制数字转为十进制parseInt('10101', 2)
得到的结果是21
,这样上面的query就可以写成
https://xxxxx.com/?options=21
而想要用js来实现把这一系列option来变成一个十进制的数字很简单,只需要用bitor操作符|
const options=[
true,
false,
true,
false,
true
]
const number = options.reduce((p,c,i) => p | (c?Math.pow(2,i):0), 0)
//number = 21
传到服务器端以后还原也很简单
const options = Array(5).fill().map((d,i)=>!!(req.query.options & Math.pow(2,i)))
// options = [true, false, true, false, true]