Home > 分享 > JS数据压缩算法

JS数据压缩算法3+

18,724 views / 2009.09.04 / 12:12 下午

研究Google chart API的时候发现它提供的数据压缩算法不错,可以把纯数字的数组压缩成很短的一个字符串,分享如下:

var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 
function simpleEncode(values,maxValue) {
 
var chartData = ['s:'];
for (var i = 0; i < values.length; i++) { var currentValue = values[i]; if (!isNaN(currentValue) && currentValue >= 0) {
chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
} else {
chartData.push('_');
}
}
return chartData.join('');
}

测试例子:

var valueArray = new Array(20,100,40,50,60,81,74);
var maxValue = 100;
document.write(simpleEncode(valueArray,maxValue));
本站内容受著作权法保护。个人 blog 转载时请遵循 “署名-非商业用途-保持一致” 的创作共用协议;商业网站或未授权媒体不得复制本站内容。
Categories: 分享 Tags: , , ,

Comments (3) Trackbacks (0) 本篇共有 3 篇评论↓
  1. verygood
    2009-12-08 23:43 | #1

    怎么解压呀? 老大

  2. 杜工
    2009-12-18 18:01 | #2

    @verygood
    其实这个算法很简单,使用大小写字母与数字,A代表0,B代表1,直至9代表61,共包含 62 个数值。
    基于此,就有思路了吧?也可以直接根据js函数反推。

  3. 杜工
    2009-12-18 18:22 | #3

    其实这本身就是有损压缩,完全解压数据不精确。
    附个php小算法解压:
    //new Array(20,100,40,50,60,81,74);
    $str = “M9Yflxt”;
    $maxValue = 100;
    $simpleEncoding = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789’;
    $original = “”;
    for($i = 0;$i < strlen($str);$i++) { $s = $str[$i]; $pos = strpos($simpleEncoding, $s); $original .= round($maxValue * $pos / (strlen($simpleEncoding)-1)) . ","; } echo substr($original, 0, -1);

  1. No trackbacks yet.