求指教这段 JS 代码是在做什么

2017-01-05 12:28:43 +08:00
 MrSong0607

如题:

__d('BitMap', [], (function a(b, c, d, e, f, g) {
    var h = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_';

    function i() {
        'use strict';
        this.$BitMap1 = [];
    }

    i.prototype.set = function(l) {
        'use strict';
        this.$BitMap1[l] = 1;
        return this;
    };

    i.prototype.toString = function() {
        'use strict';
        var l = [];
        for (var m = 0; m < this.$BitMap1.length; m++)
            l.push(this.$BitMap1[m] ? 1 : 0);
        return l.length ? k(l.join('')) : '';
    };

    i.prototype.toCompressedString = function() {
        'use strict';
        if (this.$BitMap1.length === 0) return '';
        var l = [],
            m = 1,
            n = this.$BitMap1[0] || 0,
            o = n.toString(2);
        for (var p = 1; p < this.$BitMap1.length; p++) {
            var q = this.$BitMap1[p] || 0;
            if (q === n) { m++; } else {
                l.push(j(m));
                n = q;
                m = 1;
            }
        }
        if (m) l.push(j(m));
        return k(o + l.join(''));
    };

    function j(l) {
        var m = l.toString(2),
            n = '0'.repeat(m.length - 1);
        return n + m;
    }

    function k(l) {
        var m = (l + '00000').match(/[01]{6}/g),
            n = '';
        for (var o = 0; o < m.length; o++)
            n += h[parseInt(m[o], 2)];
        return n;
    }
    f.exports = i;
}), null);
3478 次点击
所在节点    JavaScript
12 条回复
btjoker
2017-01-05 13:00:04 +08:00
base64 和图片相关
你这代码没头没尾的, 让人猜?
Nitroethane
2017-01-05 13:01:49 +08:00
函数的命名方式也是奇葩
Nutlee
2017-01-05 13:15:51 +08:00
这代码是压缩后的代码又格式化过的吧,建议看找源代码看啊 压缩会优化命名.....
alwayshere
2017-01-05 13:23:31 +08:00
@Nitroethane 这是压缩后的代码,函数命名全变了
polun
2017-01-05 13:45:52 +08:00
感觉像压缩字符串的。
rekulas
2017-01-05 13:56:55 +08:00
感觉像压缩二进制数据的,如果是,作者技术不错啊
enenaaa
2017-01-05 14:10:12 +08:00
用行程编码方式将二进制压缩成字符串, j 是具体的转换函数。
enenaaa
2017-01-05 14:27:29 +08:00
上面一条说得不太对, 应该是类似 base64 那样的转换编码。
iEverX
2017-01-05 14:29:45 +08:00
bitmap 只有 0 和 1 , toCompressedString 里面的 l 记录了连续的 0 或者 1 的次数, j 函数想字符串前面加的 0 是为了能够区分连续的两个次数。 o + l.join('')是压缩后的 01 字符串
davidzd
2017-01-05 15:16:57 +08:00
压缩字符串啊。。
limerick
2017-01-05 15:26:52 +08:00
toString 对二进制数据进行 base64 。 toCompressedString 对数据进行压缩处理然后进行 base64 。不过这个压缩处理要看压缩对象了,他这个处理方式是直接根据二进制中 0 , 1 的重复次数进行压缩。如果分布不是很连续感觉压缩之后打了很多。
MrSong0607
2017-01-06 10:40:33 +08:00
@limerick
@iEverX
@enenaaa
感谢各位

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX