一尘不染

创建指定范围内的字符数组

node.js

我读了一些在Ruby中这样做的代码:

puts ('A'..'Z').to_a.join(',')

输出:

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

有没有什么Javascript可以做到的呢?如果没有,是否有Node模块允许类似的东西?


阅读 214

收藏
2020-07-07

共1个答案

一尘不染

Javascript本身没有该功能。您可以在下面找到一些如何解决的示例:

正常功能,基本平面中的任何字符(不检查代理对)

function range(start,stop) {
  var result=[];
  for (var idx=start.charCodeAt(0),end=stop.charCodeAt(0); idx <=end; ++idx){
    result.push(String.fromCharCode(idx));
  }
  return result;
};

range('A','Z').join();

与上面相同,但是作为添加到数组原型的函数,因此可用于所有数组:

Array.prototype.add_range = function(start,stop) {
  for (var idx=start.charCodeAt(0),end=stop.charCodeAt(0); idx <=end; ++idx){
    this.push(String.fromCharCode(idx));
  }
  return this;
};

[].add_range('A','Z').join();

预选字符的范围。比上面的函数要快,并且可以alphanum_range('A','z')用来表示AZ和az:

var alphanum_range = (function() {
  var data = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('');
  return function (start,stop) {
    start = data.indexOf(start);
    stop = data.indexOf(stop);
    return (!~start || !~stop) ? null : data.slice(start,stop+1);
  };
})();

alphanum_range('A','Z').join();

或ascii范围内的任何字符。通过使用缓存的阵列,它比每次构建阵列的功能都快。

var ascii_range = (function() {
  var data = [];
  while (data.length < 128) data.push(String.fromCharCode(data.length));
  return function (start,stop) {
    start = start.charCodeAt(0);
    stop = stop.charCodeAt(0);
    return (start < 0 || start > 127 || stop < 0 || stop > 127) ? null : data.slice(start,stop+1);
  };
})();

ascii_range('A','Z').join();
2020-07-07