Javascript 用于查询字符串的位字段

Javascript 用于查询字符串的位字段,javascript,query-string,bit-fields,Javascript,Query String,Bit Fields,我有一个256个字符长的字符串,我用它作为我想用JavaScript压缩的位字段,这样我就可以把它作为url中查询字符串的一部分。我不确定做这件事最好/最有效的方法是什么 我想我想要类似于这个解决方案的东西,但我的位字段只有1和0 有什么想法吗?这就是我的想法。我的位字段保存在一个数组中。如果我将数组拆分为16个较小的块,我可以执行以下操作 var bitArray = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; console.log(

我有一个256个字符长的字符串,我用它作为我想用JavaScript压缩的位字段,这样我就可以把它作为url中查询字符串的一部分。我不确定做这件事最好/最有效的方法是什么

我想我想要类似于这个解决方案的东西,但我的位字段只有1和0


有什么想法吗?

这就是我的想法。我的位字段保存在一个数组中。如果我将数组拆分为16个较小的块,我可以执行以下操作

var bitArray = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];

console.log('Original array', bitArray);
// Logs "Original array [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]"

var stringToArray = function (str) {
    var arr = [];

    for (var i = 0; i < str.length; i++) {
        arr.push(parseInt(str[i], 10));
    }

    return arr;
}; 

var addPadding = function (str, maxLength) {

    for (var i = 0; i < maxLength - str.length; i++) {
        str = '0' + str;
    }

    return str;
};

var shrink = function (str) {
    str = parseInt(str, 10);
    str = str.toString(36);
    return str;
};

var expand = function (str) {
    str = parseInt(str, 36) + '';
    return str;
};

var qs = bitArray.join('');

qs = shrink(qs);

console.log('Shrunk value', qs);
// Logs "Shrunk value 3xsdgob0n"

// 10 characters is the maximum length of base36 string when converted.
qs = addPadding(qs, 10);
qs = addPadding(expand(qs), bitArray.length);

console.log('Re-expanded array', stringToArray(qs));
// Logs "Re-expanded array [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]"
var位数组=[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
log('原始数组',位数组);
//记录“原始数组[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]”
var stringToArray=函数(str){
var-arr=[];
对于(变量i=0;i
您考虑过Base64编码吗?在你发布的链接中,他们使用的是base-36。@FritsvanCampen,这会使它变长,而不是变短@如果Barmar的输入是位而不是字符,则不会。一个base-64字符表示6位。因此,您将得到一个43个字符的字符串。只需将其转换为十六进制,您就可以将其压缩为64个字符,按字节分组并转换为base64将使其压缩得更大……澄清一下,@Barmar的意思是,当您将一个字符串(其中字符为8位(1字节))进行base64编码为6位编码时,您的字符串将增长约33%。但您的输入是位,而不是字符。