How to generate sequence of numbers/chars in javascript?
Without a for loop, here is a solution:
Array.apply(0, Array(8)).map(function() { return 1; })
The explanation follows.
Array(8)
produces a sparse array with 8 elements, all undefined
. The apply
trick will turn it into a dense array. Finally, with map
, we replace that undefined
the (same) value of 1
.
One liner:
new Array(10).fill(1).map( (_, i) => i+1 )
Yields:
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
The original question was edited. So the updated example answers:
To fill the same content:
Array(8).fill(1)
//=> [1, 1, 1, 1, 1, 1, 1, 1]
To fill sequential numbers, starting from 5:
Array(8).fill().map((element, index) => index + 5)
//=> [5, 6, 7, 8, 9, 10, 11, 12]
To fill sequencial characters, starting from 'G':
Array(8).fill().map((element, index) => String.fromCharCode('G'.charCodeAt(0) + index))
//=> ["G", "H", "I", "J", "K", "L", "M", "N"]
You can make your own re-usable function I suppose, for your example:
function makeArray(count, content) {
var result = [];
if(typeof content == "function") {
for(var i = 0; i < count; i++) {
result.push(content(i));
}
} else {
for(var i = 0; i < count; i++) {
result.push(content);
}
}
return result;
}
Then you could do either of these:
var myArray = makeArray(8, 1);
//or something more complex, for example:
var myArray = makeArray(8, function(i) { return i * 3; });
You can give it a try here, note the above example doesn't rely on jQuery at all so you can use it without. You just don't gain anything from the library for something like this :)