Проблема:
Основная проблема заключается в том, что массивы, созданные с использованием new Array(length)
, разрежены и содержат элементы, которые никогда не устанавливаются, и большинство методов массива не работают с ним.
Решение:
Можно создать плотный массив из разреженного массива, используя apply
. Затем легко получить индексы этого массива, используя Object.keys()
Отрывки:
//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))
}