0

URL のクエリ文字列の一部として使用できるように、JavaScript で縮小したいビット フィールドとして使用している 256 文字の長さの文字列があります。これを行うための最良/最も効率的な方法が何であるかはわかりません。

このソリューションに似たものが欲しいと思います Create a large bitfieldが、私のビットフィールドには1と0しかありません。

何か案は?

4

1 に答える 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 ]"
于 2013-08-30T14:46:46.877 に答える