Issue:
The main issue is that arrays created using new Array(length)
is sparse and have elements that's never set and most array methods don't work on it.
Solution:
It's possible to create a dense array from sparse array using apply
. Then, it's easy to get indexes of that array using Object.keys()
Snippets:
//using concat
function test11(){
Array.prototype.range = function(len){
return Object.keys(Array.prototype.concat.apply([],new Array(len)))//sparse to dense
}
Logger.log([].range(16))
}
//using push
function test12(){
Array.prototype.range = function(len){
var out = [];
Array.prototype.push.apply(out,new Array(len))
return Object.keys(out);
}
Logger.log([].range(15))
}