javascript - 如何从 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);
}
任何帮助将非常感激。提前致谢
解决方案
如果我对您的理解正确,您希望:
- 存储由某个函数返回的 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"]
)一样访问数组中的不同部分。
参考:
我希望这有任何帮助。
推荐阅读
- reactjs - TypeError:无法读取 null 的属性“_currentElement” - setState 期间出错
- vba - MS 项目:Application.ActiveSelection.Tasks 在 Team Planner 视图中为空
- javascript - 如何使用 v-model 和 v-if 使用 Vue.js 构建一个简单的计算器?
- python - 使用枚举返回索引
- python - Numpy:在双数组中设置尾数的最后n个元素
- python - 如何在 TensorFlow 2 中写入 TensorBoard
- javascript - 检测变量更改并执行回调的最有效方法
- javascript - 量角器调试器找不到模块
- json - 在 Circe 中扩展 AutoDerivation 不起作用
- excel - 使用 Range 类在 VBA 中创建宏时出现运行时错误 1004