JavaScript二进制在多选type的应用

需求上传服务类型的type,数据库要求type必须位整型和整型的字符串:如type=100或者type=“100”;

刚接到需求,我也很懵逼,以前没做过,以前都是类似typeArr=【3,1,2,5】,选中什么给添加到数组typeArr,

然后发给服务器。看了后端C语言大神的代码,我就懂了,其实还可以这样。

先看看数据格式:

var data=[{
    title:'角色设计', click:false,subtype:1
  },{
    title:'概念设计', click:false,subtype:2
  },{
    title:'立绘', click:false,subtype:3
  },{
    title:'卡牌', click:false,subtype:4
  },{
    title:'CG', click:false,subtype:5
  },{
    title:'场景', click:false,subtype:6
  },{
    title:'海报', click:false,subtype:7
  },{
title:'条漫', click:false,subtype:8
  },{
title:'Q版', click:false,subtype:9
  },{
    title:"图标", click:false,subtype:10
  },{
    title:"封面", click:false,subtype:11
  },{
    title:"插图", click:false,subtype:12
  },{
    title:"头像", click:false,subtype:13
  },{
    title:"壁纸", click:false,subtype:14
  },{
    title:"印花", click:false,subtype:15
  },{
    title:"UI", click:false,subtype:16
  },{
    title:"日韩系", click:false,subtype:17
  },{
    title:"欧美系", click:false,subtype:18
  },{
    title:"中国风", click:false,subtype:19
  },{
    title:"写实", click:false,subtype:20

  }];

//类似位运算的封装,参数说明:arr是data
function enBitFn(arr) {
  let bitArr=[],//二进制数组
  bitArrStr;//二进制字符串
  for(let i in arr){
bitArr.push(0) //根据数组长度push n个0 (注意不应该超过32位)
  }
  let choseArr=arr.filter(function (ele,index,arr) {
return ele.click===true //检测是否点击了
  });
  for(let j in choseArr){
bitArr[choseArr[j].subtype-1]=1 //取点击后的数组的subtype 即是bitArr的下标的值修改为1
  }
  bitArrStr=(bitArr.join()).replace(/\,/g,'');//数组转换为字符串
  return parseInt(bitArrStr,2) //2进制字符串转10进制
};


//位运算解析,参数说明num是运算封装时的十进制,arr是data
function deBitFn(num,arr) {
  let toBit=num.toString(2),//十进制数字转二进制字符串
bitArr=toBit.split(''),//二进制数组
newArr=[];//查询结果
  if(bitArr.length<arr.length){//如果二进制数组长度不足原来的需要补足
let num=arr.length-bitArr.length;//长度差
for(let i=0 ;i<num;i++){
  bitArr.splice(0,0,'0')//补足,向数组最前面循环添加0,补足长度
}
  }
  for (let i in bitArr){//循环二进制数组
if(bitArr[i]==='1'){//如果等于1的说明是之前选中的
  newArr.push(arr[i]) //arr查询的值返回给newArr
}
  }
  return newArr
};


//调用


//发送给服务器端type=num

var num=enBitFn(data) //返回十进制num;type=num,发送给服务器存数据库;


//接收服务器端的type进行解析
var type=$.ajax();//ajax服务器获取

var newArrData=deBitFn(type,arr) //解析后返回之前选中的值

知识点:

var a = 1010;
var bitNum=a.toString(2); //转成二进制 

var num=parseInt( bitNum,2) ;//转成十进制


猜你喜欢

转载自blog.csdn.net/qq_24745557/article/details/80051726