首页 > 解决方案 > 如何从 Javascript/Google App 脚本中的另一个函数调用数组

问题描述

我正在通过外部 API 获取总时间条目。该函数需要获取包含id保存在数组中的用户数据。此 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);

}

我的第二个函数需要引用保存在数组中的 id,以便返回特定用户的总小时数,这就是我迷路的地方。

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

}

任何帮助将非常感激。提前致谢

标签: javascriptarraysjsonapigoogle-apps-script

解决方案


如果我对您的理解正确,您希望:

  • 存储由某个函数返回的 JavaScript 对象数组。
  • 在将来使用的函数中使用这个存储的数组。

如果正确,您可以使用PropertiesService来存储您的数据。此工具允许脚本将简单数据存储在键值对中。

现在,您只能存储字符串,并且要存储 JS 对象数组。因此,为了将其存储到脚本属性,您首先必须使用JSON.stringify(),它将 JavaScript 对象或值转换为 JSON 字符串。

稍后,当您想要使用数据时,您只需使用JSON.parse()将字符串转换回对象数组。

工作流程:

所以总结一下,get_users转换为 JSON 字符串并通过setProperty(key, value)userarray将其存储为脚本属性,如下所示:

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"])一样访问数组中的不同部分。

参考:

我希望这有任何帮助。


推荐阅读