我有一组复选框,其值为 1,2,4,8,16,32,64
。每个数字分别代表一周中的一天(例如星期日、星期一等...)
复选框组值是所选复选框的总和。周日、周一、周二 = 7。
我无法想出一个函数可以将总和分解回适当的数字,以便在编辑时选择正确的复选框。
(我不能只是将它们的值更改为字符串 - 后端团队是这样设置的)
第一次尝试
`initSpecificDays(){
let specificDaysArr = [1,2,4,8,16,32,64];
let daysTotal = 44;
let selectedDays = specificDaysArr.map(num=>{
return daysTotal / num;
})
console.log(selectedDays)
}`
最佳答案
您可以通过 bitwise AND &
检查给定值计算值为 1,索引为 <<
left shift operator .
如果结果是真实的,那么你就成功了。
它的工作原理是查看一个位并比较该位。
An example with
7
for["Sun", "Mon", "Tue"]
index left shift decimal binary bitw & decimal binary comment ----- ---------- ------- ------- -------- ------- ------- ------- 0 1 << 0 1 1 7 & 1 1 1 take 1 1 << 1 2 10 7 & 2 2 10 take 2 1 << 2 4 100 7 & 4 4 100 take 3 1 << 3 8 1000 7 & 8 0 0 4 1 << 4 16 10000 7 & 16 0 0 5 1 << 5 32 100000 7 & 32 0 0 6 1 << 6 64 1000000 7 & 64 0 0
const
getDays = value => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
.filter((_, i) => value & 1 << i);
console.log(getDays(7)); // ["Sun", "Mon", "Tue"]
console.log(getDays(65)); // ["Sun", "Sat"]
关于javascript - 如何从总数中启动复选框组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54790404/