javascript二进制操作don';我不为选择而工作
这是我所拥有的。。。 某些数组项具有二进制选项 像javascript二进制操作don';我不为选择而工作,javascript,arrays,binary,Javascript,Arrays,Binary,这是我所拥有的。。。 某些数组项具有二进制选项 像 $item[0]=0010 $item[1]=1000 $item[2]=0110 $item[3]=1101 每个位代表一些选项 我需要的是将其与客户请求选项进行比较 假设是0010 所以我需要逻辑只显示$item[0]和$item[2],因为第二个字节是1。但是,当没有客户选项时,检查:0000我必须全部显示 仅当显示某些选项时,必须有筛选器 我应该在数学课上多听。。。我现在不知所措,请帮帮我 注: 一切都来自这里: 但我不明白这句话
- $item[0]=0010
- $item[1]=1000
- $item[2]=0110
- $item[3]=1101
注: 一切都来自这里: 但我不明白这句话:
markers[m].setMap(((markers[m].props&props)>>>0==props)?((props)?map:null):null)代码>,所以我重写了它,我的不工作 如果您的数据是实际数字,则只需对每个成员使用按位和运算符即可
var customerOption = parseInt("0010", 2)
$item.forEach(function(n, i) {
if (customerOption === 0 || ((n & customerOption) == customerOption))
alert(i); // show this item
});
如果它们是字符串,那么您需要首先将每个项目转换为数字
同上,但是
parseInt(n, 2);
var$item=[];
$item[0]=“0010”
$item[1]=“1000”
$item[2]=“0110”
$item[3]=“1101”
var customerOption=parseInt(“0010”,2)
$item.forEach(函数(n,i){
if(customerOption==0 | |((parseInt(n,2)&customerOption==customerOption))
document.querySelector(“pre”).textContent+=“\n0010匹配索引:”+i;
});
document.querySelector(“pre”).textContent+=“\n\n”
var customerOption=parseInt(“0110”,2)
$item.forEach(函数(n,i){
if(customerOption==0 | |((parseInt(n,2)&customerOption==customerOption))
document.querySelector(“pre”).textContent+=“\n0110匹配索引:”+i;
});代码>
使用parseInt(string,2)
将所有字符串(项目以及掩码)转换为一个数字
如果mask
为0
,只需获取所有项目即可。如果没有:
然后使用&
运算符查看公共1
位:
markers[m].setMap(
((markers[m].props & props) >>> 0 === props) ?
((props) ? map : null) :
null
);
然后测试通用:
- 如果您想要任何掩码位,那么
common
不应该是0
- 如果需要所有掩码位,则
common
应等于mask
编辑:
markers[m].props&props
查找公共1
位,如上所述<代码>>>0
确保数字为正数。根据props
测试结果,确保公共位是props
中的所有位(如上面我的第二个选项)。如果设置了所有props
位,并且props
不为零,则标记[m]
为setMap
-ped至map
;否则,请转到null
getRequiredSelections('0010');
您可以这样使用它:
if (!props) props = -1;
但是,当没有客户选项时,检查:0000我必须全部显示
在2的恭维语中,-1是二进制的所有1
needle === (needle & haystack)
测试二进制格式的内容时,请同时使用&
和=
function applyByFlag(flag, callbackTrue, callbackFalse) {
if (!flag)
flag = -1;
function nop() {}
if (!callbackTrue) callbackTrue = nop;
if (!callbackFalse) callbackFalse = nop;
boxes.forEach(function (e, i, a) {
if (flag & e) // not exact test
callbackTrue.call(e, e, i, a);
else
callbackFalse.call(e, e, i, a);
});
}
这意味着在haystack=0001
中查找needle=1001
是false
,即使1001&0001
是真实的0001
您可能不希望在您的案例中使用完全匹配
您可以编写一些代码,使用回调来处理数组
for(var m=0; m < markers.length; m++) {
var show = (markers[m].props & props)>>>0===props || props == 0;
markers[m].setMap(show ? map : null);
}
当然,您可能希望调整测试,使其与e.props
相对应,您的代码几乎就在那里;只需在props
为零时添加额外的检查:
var show = (markers[m].props & props) || props == 0;
数组项是字符串还是数字?0010
不是二进制,而是十进制数10
。JavaScript des不支持二进制文本。你是说字符串“0010”
?一个字符串,因为我需要从右到左构建它,但如果需要,我可以将它转换为数字,它是EZ!如果客户选项为0010
,为什么要排除项目0
?你的意思是0100
?不是,检查我的编辑这行的解释很有用。。。你应该选择这个作为正确答案。。。。但这并不完美。。。谢谢!我不熟悉接线员。。。但是现在代码是。。。如果一位开启或另一位开启,则。。。我需要的是,穿上一点,而不是。。。未来的变化是什么code@menardmam:不知道你的意思。您是说客户选项将有两个位要测试吗?你能举个例子吗?所以如果客户要求0110,那么只有[3]会有……更深入的解释。。。如果a=1010101011和b=00000000 11,客户要求00000000 11,则最后两位都打开,a+b显示!清楚吗?@menardmam:Change!=0
至==客户选项
。&
运算符将返回匹配的任何位,因此如果将其与原始值进行比较,则只有当它们都匹配时,才为true
。演示:
for(var m=0; m < markers.length; m++) {
var show = (markers[m].props & props)>>>0===props || props == 0;
markers[m].setMap(show ? map : null);
}
var show = (markers[m].props & props) || props == 0;