推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
MrSong0607

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

  •  
  •   MrSong0607 · Jan 5, 2017 · 4725 views
    This topic created in 3593 days ago, the information mentioned may be changed or developed.

    如题:

    __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);
    
    Supplement 1  ·  Jan 5, 2017
    没说清楚,只需要看 toCompressedString 这个函数的作用就好了,先谢过
    12 replies  •  2017-01-06 10:40:33 +08:00
    btjoker
    btjoker
    Jan 5, 2017
    1
    base64 和图片相关
    你这代码没头没尾的, 让人猜?
    Nitroethane
    Nitroethane
    Jan 5, 2017 via Android
    2
    函数的命名方式也是奇葩
    Nutlee
    Nutlee
    Jan 5, 2017
    3
    这代码是压缩后的代码又格式化过的吧,建议看找源代码看啊 压缩会优化命名.....
    alwayshere
    alwayshere
    Jan 5, 2017
    4
    @Nitroethane 这是压缩后的代码,函数命名全变了
    polun
    polun
    Jan 5, 2017
    5
    感觉像压缩字符串的。
    rekulas
    rekulas
    Jan 5, 2017
    6
    感觉像压缩二进制数据的,如果是,作者技术不错啊
    enenaaa
    enenaaa
    Jan 5, 2017
    7
    用行程编码方式将二进制压缩成字符串, j 是具体的转换函数。
    enenaaa
    enenaaa
    Jan 5, 2017❤️1
    8
    上面一条说得不太对, 应该是类似 base64 那样的转换编码。
    iEverX
    iEverX
    Jan 5, 2017❤️1
    9
    bitmap 只有 0 和 1 , toCompressedString 里面的 l 记录了连续的 0 或者 1 的次数, j 函数想字符串前面加的 0 是为了能够区分连续的两个次数。 o + l.join('')是压缩后的 01 字符串
    davidzd
    davidzd
    Jan 5, 2017
    10
    压缩字符串啊。。
    limerick
    limerick
    Jan 5, 2017❤️1
    11
    toString 对二进制数据进行 base64 。 toCompressedString 对数据进行压缩处理然后进行 base64 。不过这个压缩处理要看压缩对象了,他这个处理方式是直接根据二进制中 0 , 1 的重复次数进行压缩。如果分布不是很连续感觉压缩之后打了很多。
    MrSong0607
    MrSong0607
    OP
    Jan 6, 2017
    12
    @limerick
    @iEverX
    @enenaaa
    感谢各位
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1503 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    ♥ Do have faith in what you're doing.