создать массив первых n целых чисел в скрипте приложения Google - PullRequest
0 голосов
/ 08 июня 2019

После этого ответа для аналогичного вопроса для ванильного JavaScript, я попытался создать массив целых чисел от 1 до 20 с помощью следующего кода:

var k=Array.from(new Array(20), (x,i) => i + 1);

но я получаю Syntax error.Очевидно, Google App Script не поддерживает ES6.

Есть ли современная альтернатива for ... loop?

Ответы [ 3 ]

3 голосов
/ 08 июня 2019
  • Вы хотите создать массив, включающий номер в каждом элементе, используя Google Apps Script.
    • Это как [1.0, 2.0, 3.0,,, 20]

Если мое понимание верно, как насчет этого обходного пути? Пожалуйста, подумайте об этом как об одном из нескольких обходных путей. В этом обходном пути я использовал Array.apply().

Пример сценария:

var res = Array.apply(null, Array(20)).map(function(_, i) {return i + 1});
console.log(res); // or for Google Apps Script, Logger.log(res)

Примечание:

  • Например, когда запускается Array.apply(null, Array(3)}), создается массив [null, null, null]. В этом сценарии значения помещаются в каждый элемент, используя map().
  • Вышеупомянутый скрипт может работать с Google Apps Script.
  • Если вы хотите использовать Logger.log(), замените console.log(res) на Logger.log(res).

Ссылки:

Если этот обходной путь был не тем направлением, которое вы хотите, я прошу прощения.

2 голосов
/ 08 июня 2019

Нет.Цикл for / while по-прежнему лучше (эффективнее) даже в современных браузерах.Можно использовать небольшую функцию:

function range(n) { var a = []; while(n) a[n - 1] = n--; return a }

console.log( range(5) )
2 голосов
/ 08 июня 2019

Проблема:

Основная проблема заключается в том, что массивы, созданные с использованием 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...