什么是可以用来增加字母的方法?

IT技术 javascript increment alphabetical
2021-01-20 18:32:46

有谁知道提供增加字母的方法的 Javascript 库(例如下划线、jQuery、MooTools 等)?

我希望能够执行以下操作:

"a"++; // would return "b"
6个回答

简单直接的解决方案

function nextChar(c) {
    return String.fromCharCode(c.charCodeAt(0) + 1);
}
nextChar('a');

正如其他人所指出的,缺点是它可能无法按预期处理字母“z”之类的情况。但这取决于你想从中得到什么。上面的解决方案将为'z'之后的字符返回'{',这是ASCII中'z'之后的字符,因此它可能是您正在寻找的结果,具体取决于您的用例是什么。


独特的字符串生成器

(更新于 2019/05/09)

由于这个答案获得了如此多的关注,我决定将其扩展到原始问题的范围之外,以可能帮助那些在谷歌上绊倒的人。

我发现我经常想要的是在某个字符集中生成连续的、唯一的字符串(例如只使用字母),所以我更新了这个答案以包含一个可以在此处执行此操作的类:

class StringIdGenerator {
  constructor(chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    this._chars = chars;
    this._nextId = [0];
  }

  next() {
    const r = [];
    for (const char of this._nextId) {
      r.unshift(this._chars[char]);
    }
    this._increment();
    return r.join('');
  }

  _increment() {
    for (let i = 0; i < this._nextId.length; i++) {
      const val = ++this._nextId[i];
      if (val >= this._chars.length) {
        this._nextId[i] = 0;
      } else {
        return;
      }
    }
    this._nextId.push(0);
  }

  *[Symbol.iterator]() {
    while (true) {
      yield this.next();
    }
  }
}

用法:

const ids = new StringIdGenerator();

ids.next(); // 'a'
ids.next(); // 'b'
ids.next(); // 'c'

// ...
ids.next(); // 'z'
ids.next(); // 'A'
ids.next(); // 'B'

// ...
ids.next(); // 'Z'
ids.next(); // 'aa'
ids.next(); // 'ab'
ids.next(); // 'ac'
正是我正在寻找的,因为我试图通过并挑选出不显示的 unicode 字符到老式 IBM Code Page 437 字体。你真的只是为我节省了几个小时的字符输入时间。
2021-03-15 18:32:46
Daniel Thompson 这个解决方案提供了足够多的信息,你可以自己处理极端情况。毕竟这是一个“互帮互助”的网站,不是免费的网站。
2021-03-15 18:32:46
一种嗡嗡声,它将进入特殊字符,如 /
2021-03-25 18:32:46
我花了一段时间才弄清楚如何使起始字符成为参数。我最终使用了 ._nextId = [chars.split('').findIndex(x=>x==start)]; 或者 start+1 如果你想让它比你传入的多开始 1。
2021-03-27 18:32:46
简单的解决方案,但不处理 'z' 或 'Z' 的出现。
2021-03-28 18:32:46

普通的 javascript 应该可以解决问题:

String.fromCharCode('A'.charCodeAt() + 1) // Returns B
Pure Charm,关于避免空格和特殊字符的任何建议。coderByte 对此有疑问
2021-03-18 18:32:46

如果给定的字母是 z 呢?这是一个更好的解决方案。它是 A、B、C... X、Y、Z、AA、AB 等。基本上它会增加字母,如 Excel 电子表格的列 ID。

nextChar('yz'); // 返回“ZA”

    function nextChar(c) {
        var u = c.toUpperCase();
        if (same(u,'Z')){
            var txt = '';
            var i = u.length;
            while (i--) {
                txt += 'A';
            }
            return (txt+'A');
        } else {
            var p = "";
            var q = "";
            if(u.length > 1){
                p = u.substring(0, u.length - 1);
                q = String.fromCharCode(p.slice(-1).charCodeAt(0));
            }
            var l = u.slice(-1).charCodeAt(0);
            var z = nextLetter(l);
            if(z==='A'){
                return p.slice(0,-1) + nextLetter(q.slice(-1).charCodeAt(0)) + z;
            } else {
                return p + z;
            }
        }
    }
    
    function nextLetter(l){
        if(l<90){
            return String.fromCharCode(l + 1);
        }
        else{
            return 'A';
        }
    }
    
    function same(str,char){
        var i = str.length;
        while (i--) {
            if (str[i]!==char){
                return false;
            }
        }
        return true;
    }

// below is simply for the html sample interface and is unrelated to the javascript solution

var btn = document.getElementById('btn');
var entry = document.getElementById('entry');
var node = document.createElement("div");
node.id = "node";

btn.addEventListener("click", function(){
  node.innerHTML = '';
  var textnode = document.createTextNode(nextChar(entry.value));
  node.appendChild(textnode);
  document.body.appendChild(node);
});
<input id="entry" type="text"></input>
<button id="btn">enter</button>

更改if (same(u,'Z')){if (u == 'Z'){,它完美地工作,谢谢!
2021-03-17 18:32:46
应该是这样,same()显然是自定义函数。哦,很好,==有效,如果我想非常确定,我可以使用===,但我已经测试过它,它很好。再次感谢!
2021-03-22 18:32:46
很高兴它有效,并感谢您的反馈。也许那个最初的错误是因为那里same(str,char)没有粘贴标题函数的函数我不知道。
2021-03-24 18:32:46
我不这么认为?zz 之后是什么?对吗?我没有在这台机器上安装 excel(仔细检查),但对我来说听起来不错。
2021-04-01 18:32:46
如果你输入 zz 你会得到三个 A 这是代码中的错误吗??
2021-04-02 18:32:46

一种可能的方式可以定义如下

function incrementString(value) {
  let carry = 1;
  let res = '';

  for (let i = value.length - 1; i >= 0; i--) {
    let char = value.toUpperCase().charCodeAt(i);

    char += carry;

    if (char > 90) {
      char = 65;
      carry = 1;
    } else {
      carry = 0;
    }

    res = String.fromCharCode(char) + res;

    if (!carry) {
      res = value.substring(0, i) + res;
      break;
    }
  }

  if (carry) {
    res = 'A' + res;
  }

  return res;
}

console.info(incrementString('AAA')); // will print AAB
console.info(incrementString('AZA')); // will print AZB
console.info(incrementString('AZ')); // will print BA
console.info(incrementString('AZZ')); // will print BAA
console.info(incrementString('ABZZ')); // will print ACAA
console.info(incrementString('BA')); // will print BB
console.info(incrementString('BAB')); // will print BAC

// ... and so on ...

你可以试试这个

console.log( 'a'.charCodeAt​(0))​

首先将其转换为 Ascii 数字 .. 增加它 .. 然后从 Ascii 转换为字符 ..

var nex = 'a'.charCodeAt(0);
console.log(nex)
$('#btn1').on('click', function() {
   var curr = String.fromCharCode(nex++)
   console.log(curr)
});

检查小提琴

唔。需要更多的jQuery。
2021-04-02 18:32:46