Какие функции поддерживают массивы в Google Apps Script?

Я продолжаю находить, что функции массива отсутствуют в Газе, например, вызов find выдает ошибку: Cannot find function find in object

единственные документы, которые я могу найти на этом, несколько неоднозначны: https://developers.google.com/apps-script/guides/services/#basic_javascript_features

Apps Script основан на JavaScript 1.6, плюс несколько функций из 1.7 и 1.8. Таким образом, многие основные функции JavaScript доступны в дополнение к встроенному и расширенному Google службы: вы можете использовать общие объекты, такие как Array, Date, RegExp и т. д., а также глобальные объекты Math и Object. Однако, поскольку код сценария приложений работает на серверах Google (не на стороне клиента, за исключением HTML-страниц), браузерные функции, такие как Dom manipulation или Window API, недоступны.

Как я могу увидеть, какие точные методы доступны в массиве?

3 ответов


когда сомневаетесь, проверьте себя!

проверьте это для себя с:

function es_feature_test(f) {
  var a = [1, 2, 3, 4];

  try {
    a[f].call(a, function () { return true; });
    Logger.log("+ %s", f);
  } catch (e) {
    Logger.log("- %s", f);
  }
}

function es_test() {
  [
    "any",
    "every",
    "fill",
    "filter",
    "find",
    "findIndex",
    "forEach",
    "includes",
    "indexOf",
    "join",
    "keys",
    "lastIndexOf",
    "map",
    "pop",
    "push",
    "reduce",
    "reduceRight",
    "reverse",
    "shift",
    "slice",
    "some",
    "sort",
    "splice"
  ].forEach(function (fName) {
    es_feature_test(fName);
  });
}

Примечание: данный перечень функций не является исчерпывающим и предназначен только для примера.

, который выводит что-то вроде:

[16-09-05 14:48:38:843 CEST] - any
[16-09-05 14:48:38:843 CEST] + every
[16-09-05 14:48:38:844 CEST] - fill
[16-09-05 14:48:38:844 CEST] + filter
[16-09-05 14:48:38:845 CEST] - find
[16-09-05 14:48:38:846 CEST] - findIndex
[16-09-05 14:48:38:846 CEST] + forEach
[16-09-05 14:48:38:847 CEST] - includes
[16-09-05 14:48:38:847 CEST] + indexOf
[16-09-05 14:48:38:848 CEST] + join
[16-09-05 14:48:38:848 CEST] - keys
[16-09-05 14:48:38:849 CEST] + lastIndexOf
[16-09-05 14:48:38:849 CEST] + map
[16-09-05 14:48:38:850 CEST] + pop
[16-09-05 14:48:38:850 CEST] + push
[16-09-05 14:48:38:851 CEST] + reduce
[16-09-05 14:48:38:851 CEST] + reduceRight
[16-09-05 14:48:38:851 CEST] + reverse
[16-09-05 14:48:38:852 CEST] + shift
[16-09-05 14:48:38:852 CEST] + slice
[16-09-05 14:48:38:853 CEST] + some
[16-09-05 14:48:38:853 CEST] + sort
[16-09-05 14:48:38:854 CEST] + splice

кроме того, метод robd тоже отлично работает, за исключением того, что он сообщает вам только список методов, которые видны. Он не говорит вам:

  • действительно ли они работают (Они могут блокировать access),
  • какие методы не видны.

поэтому я предпочитаю мой немного более явный подход.

еще лучшим методом, чем мой, было бы фактически проверить тестовые функции, чтобы убедиться, что поведение правильное, но... Ну что ж...

газовая функция вызова поддержка Fun Fact

вот что странно: я впервые протестировал использование реализации с .apply() вместо .call() (по привычке), и как ни странно только методы, поддерживаемые в Редакторе GAS, появились как поддерживаемые. Работает отлично, используя .call() хотя. Довольно странный.

Я хочу, чтобы мои функциональные инструменты!

проверить underscoreGS.


Logger.log(Object.getOwnPropertyNames(Array.prototype)) дает следующее, что я думаю, что это правильный список:

[constructor, toString, toLocaleString, toSource, join, reverse, sort, push, pop, shift, unshift, splice, concat, slice, indexOf, lastIndexOf, every, filter, forEach, map, some, reduce, reduceRight, length]


помимо ответа robd там тоже библиотека 2D массивов.
Согласно изображению (но не документации), которое имеет a найти функцию