javascript - 将数字转换为字符串(提供的字符集)JavaScript

标签 javascript

更新:

在 $char.to_text 遇到大于 55,834,574,847 的整数之前,以下代码可以完美运行。

alpha="abcdefghijklmnopqrstuvwxyz";
$char={
    to_num:function(s,c){
        var l=c.length,o={};
        c.split('').forEach(function(a,i){
            o[a]=i
        });
        return s.split('').reduce(function(r,a){
            return r*l+o[a]
        },0)
    },
    to_text:function(i,c){
        var l=c.length,s='';
        do{
            s=c[i%l]+s; // i%l
            i/=l;
            i|=0
        }while(i!==0);
        return s
    }
};

这里是一个快速片段:

$char.to_num("military",alpha) => 98987733674
$char.to_text(98987733674,alpha) => "undefinedundefinedundefinedundefinedundefinedundefinedundefinedy"

手动迭代上面的代码应该会产生一个正常的响应,为什么它会产生这个“undefined...”字符串,是否仅仅是因为它是JS的大量操作?

最佳答案

这是一个带有重写的hash函数的提案,它使用一个对象o作为简化的indexOf和一个简单的返回值循环.

所需函数 ihash 使用单个 do ... until 循环。它使用值的其余部分和长度作为给定字符集的索引。然后将该值除以字符集的长度,如果不等于零,则取整数部分用于下一次迭代。

function hash(s) {
    var c = '0abcdefghijklmnopqrstuvwxyz',
        l = c.length,
        o = {};

    c.split('').forEach(function (a, i) {
        o[a] = i;
    });
    return s.split('').reduce(function (r, a) {
        return r * l + o[a];
    }, 0);
}

function ihash(i) {
    var c = '0abcdefghijklmnopqrstuvwxyz',
        l = c.length,
        s = '';

    do {
        s = c[i % l] + s;
        i = Math.floor(i / l);
    } while (i !== 0);
    return s;
}

document.write(hash('0') + '<br>');          // => 0
document.write(hash('a') + '<br>');          // => 1
document.write(hash('hi') + '<br>');         // => 225
document.write(hash('world') + '<br>');      // => 12531838
document.write(hash('freecode') + '<br>');   // => 69810159857

document.write(ihash(0) + '<br>');           // => '0'
document.write(ihash(1) + '<br>');           // => 'a'
document.write(ihash(225) + '<br>');         // => 'hi'
document.write(ihash(12531838) + '<br>');    // => 'world'
document.write(ihash(69810159857) + '<br>'); // => 'freecode'

关于javascript - 将数字转换为字符串(提供的字符集)JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323622/

相关文章:

javascript - 如何使用 jquery 或 JavaScript 将元素属性与 Bootstrap Popover html 绑定(bind)?

javascript - 与传统命名空间相比,ES6 导出/导入用例

javascript - 我应该使用 PHP 进行数学运算,还是转换为 JavaScript?

javascript - 如果我使用另一个域名来为我的 JavaScript 提供服务,并且该 JavaScript 设置了一个 cookie,那算作第三方 cookie 吗?

javascript - 从另一个字符串中提取两个特定字符之间的字符串

javascript - $http数据,类型错误: Cannot call method slice of undefined

javascript - Google Cloud功能环境每个功能都超时

javascript - 为什么javascript有时会输出 undefined variable

javascript - 如何使用 HTML 按钮标签发送 HTML 表单 POST 请求?

javascript - global.eval 无法访问词法范围内的变量。该行为是否符合 ECMAScript 标准?