首页 > 解决方案 > 我怎样才能扭转这个字母 id 让系统反过来呢?

问题描述

所以这个函数可以根据你发送的数字来获取一个或多个字母字符。我想反转这个函数,这样当我发送字符时,我会收到一个数字。我已经能够用单个字母来实现这一点。

我已经创建了一个字母 id 系统,首先生成一个数字,然后使用这个 id 作为索引将其转换为字母表中的一个字母。但我想做的是在使用 26 个字符后,我希望它继续使用 AA、AB、AC 等。

编辑:我想澄清一下,我的想法是转换器应该超越 A 系列。所以在 AZ 之后是 BA BB.. BZ、CA CB CC 等等。另外我想要返回的是一个数字而不是字母。原来的函数给了我字母,现在我需要反转它来取回我在前一个函数中发送的数字

function convertNumberToId (number) {
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');

    if (number < alphabet.length) {
      return alphabet[number];
    } else {
      return (
        convertNumberToId(Math.floor(number / alphabet.length) - 1)
        +
        convertNumberToId(number % alphabet.length)
      );
    }
}

在 if 语句中,如果数字不超过数组的长度,您会收到一封回信,但一旦超过,您将收到 AA、AB、AC 等。现在我想扭转这一点。

这是我到目前为止所取得的成就:

function convertIdToNumber(id){
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
    if($.inArray(id , alphabet) !== -1){
        return alphabet.indexOf(id);
    }
    else{

    }

}

标签: javascriptjquery

解决方案


已修订(从 0 索引开始)

现在我们从右到左计算值。当您向左移动时,字符的值将乘以字母表的长度,然后再加上您向左移动的位数。处理偏移量 1。

function convertNumberToId (number) {
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');

    if (number < alphabet.length) {
      return alphabet[number];
    } else {
      return (
        convertNumberToId(Math.floor(number / alphabet.length) - 1)
        +
        convertNumberToId(number % alphabet.length)
      );
    }
}

function convertIdToNumber(id){
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
    if(id.length == 1){
        return alphabet.indexOf(id) >= 0 ? alphabet.indexOf(id) : -1;
    }
    else if (id.length > 0){
        let t = 0;
        for (let i = 0; i < id.length; i++) {
          t += (1 + convertIdToNumber(id.charAt(id.length - 1 - i))) * Math.pow(alphabet.length, i);
        }
        t--;
        return t;
    } else {
        return -1;
    }

}

console.log(convertIdToNumber('b'));
console.log(convertNumberToId(1));
console.log(convertIdToNumber('abc'));
console.log(convertNumberToId(730));


找到id中每个字符的值,每增加一个字符就加上字母表的长度,当你有多个字符时处理1的偏移量。

从索引 0 开始

function convertIdToNumber(id){
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
    if(id.length == 1){
        return alphabet.indexOf(id);
    }
    else if (id.length > 0) {
        return convertIdToNumber(id.split('')[0]) 
            + alphabet.length 
            + convertIdToNumber(id.slice(1))
            + 1;
    } else {
        return -1;
    }
}

console.log(convertIdToNumber('ac'));

从索引 1 开始

function convertIdToNumber(id){
    var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
    if(id.length == 1){
        return alphabet.indexOf(id) >= 0 ? alphabet.indexOf(id) + 1 : -1;
    }
    else if (id.length > 0) {
        return convertIdToNumber(id.split('')[0]) 
            + alphabet.length 
            + convertIdToNumber(id.slice(1))
            - 1;
    } else {
        return -1;
    }
}

console.log(convertIdToNumber('ac'));


推荐阅读