Jakie funkcje obsługują tablice w Google Apps Script?

Ciągle znajduję, że w gazie brakuje funkcji tablicy, np wywołanie find daje błąd: Cannot find function find in object

Jedyne dokumenty, które mogę znaleźć na ten temat, są nieco niejednoznaczne: https://developers.google.com/apps-script/guides/services/#basic_javascript_features

Apps Script jest oparty na JavaScript 1.6, plus kilka funkcji z 1.7 i 1.8. Oprócz wbudowanych i zaawansowanych usług Google dostępnych jest wiele podstawowych funkcji JavaScript: możesz używać wspólnych obiekty takie jak tablica, Data, Wyrażenie regularne i tak dalej, a także obiekty Globalne Math i Object. Ponieważ jednak kod skryptu aplikacji działa na serwerach Google (nie po stronie klienta, z wyjątkiem stron HTML-service), funkcje oparte na przeglądarce, takie jak manipulacja DOM lub interfejs API okna nie są dostępne.

Jak mogę zobaczyć jakie dokładne metody są dostępne w tablicy?

Author: robd, 2016-09-04

3 answers

Kiedy masz wątpliwości, sprawdź się!

Sprawdź to sam z:

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);
  });
}

uwaga: Ta lista funkcji nie jest wyczerpująca i służy tylko do celów przykładowych.

Co daje coś w rodzaju:

[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

Alternatywnie, metoda robda również działa dobrze, z tym, że informuje tylko o liście metod, które są widoczne. Nie mówi:

  • czy faktycznie działają (mogą zablokować dostęp),
  • które metody nie są widoczne.
Więc wolę moje nieco bardziej wyraźne podejście.

Jeszcze lepszą metodą niż moja byłoby sprawdzenie przypadków testu funkcji, aby upewnić się, że zachowania są poprawne, ale... no cóż...

Obsługa wywołania funkcji gazowej ciekawostka

Oto coś dziwnego: najpierw przetestowałem implementację z .apply() zamiast .call() (z przyzwyczajenia), i o dziwo tylko metody obsługiwane w edytorze gazu pojawiły się jako obsługiwane. Działa dobrze przy użyciu .call() chociaż. Raczej dziwne.

Chcę moje funkcjonalne narzędzia z powrotem!

Zobacz podkategorie .

 9
Author: haylem,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-05 12:56:10

Logger.log(Object.getOwnPropertyNames(Array.prototype)) podaje co następuje, co moim zdaniem jest poprawną listą:

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

 8
Author: robd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 13:09:49

Oprócz odpowiedzi robda istnieje również biblioteka tablic 2d .
Zgodnie z obrazem (ale nie dokumentacją), że mamy a Funkcja find

 2
Author: Robin Gertenbach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 13:14:23