用于查询字符串的位字段

Bit field for use in query string

本文关键字:字段 字符串 查询 用于      更新时间:2023-09-26

我有一个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 ]"