构建['a','b','c','d',...,'z']的好方法

时间:2011-12-09 22:58:26

标签: javascript

我想以干净的方式构造数组['a', 'b', 'c', 'd', ..., 'z']。我找到的最好的是

'a b c d e f g h i j k l m n o p q r s t u v w x y z'.split(' ');

我想知道是否有更“程序化”的方法。

8 个答案:

答案 0 :(得分:27)

为什么不只是一个文字数组?

var chars = [
  'a','b','c','d','e','f','g','h','i','j','k','l','m',
  'n','o','p','q','r','s','t','u','v','w','x','y','z'
];

编辑:

我必须测试,这比分割字符串要快很多jsperf.com/arraycreation

答案 1 :(得分:22)

嗯,这可以缩短一点:

'abcdefghijklmnopqrstuvwxyz'.split('');

但让我想到另一种方式......

编辑 ...不,我认为没有比Guffa更快的方式

答案 2 :(得分:12)

  

我想知道是否有更“程序化”的方法?

可以用代码来做...

var chars = [];
for (var i = 97; i < 123; i++) {
    chars.push(String.fromCharCode(i));
}

jsFiddle

您可以启动范围类型功能来执行此操作。这至少会包含生成这个内联的丑陋......

// Create a range of letters.
var createAlphaRange = function(start, end) {
    var chars = [],
        startOrdinal = start.charCodeAt(0),
        endOrdinal = end.charCodeAt(0);

    for (startOrdinal; startOrdinal <= endOrdinal; startOrdinal++) {
        chars.push(String.fromCharCode(startOrdinal));
    }

    return chars;

}

jsFiddle

然而,我同意literal Array is a better solution ...

  • 简明扼要。
  • 您可以一眼就看出Array包含的内容。无需在逻辑上单步执行代码。
  • 您可以避免始终使用代码创建完全相同的Array。字母表永远不会(很少?)改变。
  • 担心这可能包含一些琐碎的字符等错误的代码。

答案 3 :(得分:9)

alphabet = [];
for (var i = 'a'.charCodeAt(0); i < 'z'.charCodeAt(0); i++)
{
    alphabet.push(String.fromCharCode(i));
}

console.log(alphabet);

答案 4 :(得分:3)

JavaScript 在版本1.7(2006)中添加了数组解析和生成器。看起来他们也是added to ECMAScript。 JScript(IE)似乎不支持它们。

阵列理解允许简洁的解决方案。

var letters = [String.fromCharCode(i) for each (i in range(97, 123))]

rangeas defined here

注意:请记住,目前要在Firefox中使用它,您需要指定所需的版本:

<script type="application/javascript;version=1.7" src="foo.js">

10年后回到这篇文章。

答案 5 :(得分:1)

您可以使用String.fromCharCode()和循环来构造它。 例如97 trought 122将完成你想要的角色。

答案 6 :(得分:1)

s = 'a';
while (!/z/.test(s)) s += String.fromCharCode(s.charCodeAt(s.length-1)+1) 

document.write(s.split(''));

http://jsfiddle.net/HerrSerker/FTDaR/

答案 7 :(得分:0)

递归;

String.prototype.through = function(z) {
 if (this.charCodeAt(this.length-1) == z.charCodeAt(0)) return this;
    return this + String.fromCharCode(this.charCodeAt(0)+1).through(z)   
}

document.write("a".through("z").split(''))

当然这不推荐,也不快。

或使用不同的through方法

String.prototype.through = function(z) {
 var start = curr = (''+this).charCodeAt(0);
 var end = z.charCodeAt(0)
 var increment = (start < end) ? 1 : -1;
 var ret = ''+this
 while (curr != end) {
     curr += increment;
     ret += String.fromCharCode(curr);
 }
 return ret;
}