我想以干净的方式构造数组['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(' ');
我想知道是否有更“程序化”的方法。
答案 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));
}
您可以启动范围类型功能来执行此操作。这至少会包含生成这个内联的丑陋......
// 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;
}
然而,我同意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))]
range
为as 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(''));
答案 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;
}