Как вызвать массив из другой функции в сценарии Javascript / Google App - PullRequest
0 голосов
/ 24 января 2020

Я работаю над тем, чтобы получать записи общего времени через внешний API. Функция должна получать пользовательские данные, которые включают id, сохраненные в массиве. Этот идентификатор должен вызываться второй функцией, чтобы получить часы для диапазона данных и суммировать их, а также сохранить их в массиве. Системный API находится в https://github.com/10Kft/10kft-api

Это моя первая функция для получения пользовательских данных.

function get_users() {
    // function loops through 10000ft  paginations and scrapes user data to array
    var userarray = [];        
    var lastpage  = false;
    var page      = 1;

    do{        
        // gets 10kft data
        var users = read10k_users(page);            
        // writes data from current page to array

        for (i in users.data) {
            var rec     = {};
            // pushing of mandatory data
            rec.id      = users.data[i].id;
            rec.display_name = users.data[i].display_name;
            rec.email   = users.data[i].email;                
            userarray.push(rec);

        }

        Logger.log(userarray)
        // checks if this is the last page (indicated by paging next page link beeing null
        if (users.paging.next != null) {
            lastpage = false;
            var page = page + 1;
        } else {
            lastpage = true;
        }

    }while (lastpage == false);

    return (userarray);

}

Моя вторая функция должна ссылаться на идентификатор, сохраненный в массиве в Чтобы вернуть общее количество часов для определенных c пользователей, я заблудился.

function get_timedata(id) {
    // function loops through 10000ft  paginations and scrapes time entries to array
    var timearray = [];        
    var lastpage  = false;
    var page      = 1;

    do{

        // gets time data from  10000ft 
        var timedata = read10k_timedata(from_dt,to_dt,); 

        // writes data from current page to array

        for (i in timedata.data) {
            var rec       = {};
            // collection of time data from time entries endpoint
            rec.id        = timedata.data[i].id;
            rec.user      = timedata.data[i].user_id;
            rec.hours_inc = timedata.data[i].hours;                 

            // pushing  incurred hours      
            if (rec.hours_inc >= 0 ) {
                timearray.push(rec);                
            }
            //Logger.log(timearray)
        }

        // checks if this is the last page (indicated by paging next page link beeing null
        if (timedata.paging.next != null) {
            lastpage = false;
            var page = page + 1;
        } else {
            lastpage = true;
        }

    }while (lastpage == false);        
    return (timearray);

}

Любая помощь будет принята с благодарностью. Заранее спасибо

1 Ответ

2 голосов
/ 24 января 2020

Если я правильно вас понимаю, вы хотите:

  • Сохранить массив JavaScript объектов, возвращаемых определенной функцией.
  • Использовать этот сохраненный массив в функции, которая вы будете использовать в будущем.

Если это правильно, вы можете использовать PropertiesService для хранения ваших данных. Этот инструмент позволяет сценариям хранить простые данные в парах ключ-значение.

Теперь вы можете хранить только строки и хотите сохранить массив из JS объектов. Таким образом, чтобы сохранить его в свойстве скрипта, сначала нужно использовать JSON .stringify () , который преобразует объект или значение JavaScript в строку JSON.

Позже, когда вы захотите использовать данные, вам просто нужно будет использовать JSON .parse () , чтобы преобразовать строку обратно в массив объектов.

Рабочий процесс :

Итак, суммируя это, в get_users конвертируем userarray в JSON строку и сохраняем ее как свойство скрипта через setProperty (key, value) , например так:

var value = JSON.stringify(userarray);
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty("your-key", value);

Затем, всякий раз, когда вы хотите извлечь эти данные (в get_timedata или в другой функции, которая будет их вызывать), извлекайте свойство с помощью getProperty (key) и преобразовать его в массив объектов, например:

var scriptProperties = PropertiesService.getScriptProperties();
var value = scriptProperties.getProperty("your-key");
var object = JSON.parse(value);

Теперь вы можете получить доступ к различным ids в массиве, как если бы вы использовали исходный массив (например, object[0]["id"]).

Ссылка:

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...