EhevuTov EhevuTov - 4 months ago 6
Node.js Question

Create an array of characters from specified range

I read some code where someone did this in Ruby:

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



Is there something in
that will allow this to be done just as easy? if not, is there Node module that allows for something similar?


Javascript doesn't have that functionality natively. Below you find some examples of how it could be solved:

Normal function, any characters from the base plane (no checking for surrogate pairs)

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


The same as above, but as a function added to the array prototype, and therefore available to all arrays:

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


A range from preselected characters. Is faster than the functions above, and let you use alphanum_range('A','z') to mean A-Z and a-z:

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);


Or any character from the ascii range. By using a cached array, it is faster than the functions that build the array every time.

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);