我正在研究一个简单的注册系统,该系统显示特定工作室中可用座位的数量。它内置在使用JavaScript语法运行的Google Apps脚本中。构建和更新数组对象
我在登录时为用户构建了一个Class
对象的数组。其中一个对象键是seats
,它显示了车间中剩余的点的可用数量。为了达到这个目的,我比较了主要类别列表,以便将最大注册人数量提供给当前注册列表。
类对象
[{
date: 4/10/2017,
title: "Workshop 1",
desc: "A string description for 1",
seats: ""
}]
谷歌表表
| date | title | description | seats | |
|-----------|------------|----------------------------|-------|---|
| 4/10/2017 | Workshop 1 | A string description for 1 | 20 | |
| 5/10/2017 | Workshop 2 | A string description for 2 | 25 | |
当前注册记忆
| user | class0 | class1 |
|-------|-----------|-----------|
| user1 | 4/10/2017 | |
| user2 | 4/10/2017 | 5/10/2017 |
| | | |
脚本
// Set the count variable
var count;
// Sessions the user is not registered for
for(var i=0; i<sessions.length; i++) {
// Look the class up in the master list
for(var j=0; j<allSessionsData.length; j++) {
// Find the stored date in the master list
var date = allSessionsData[j][0];
// match the session dates to find the max seats
if(sessions[i].date === date) {
sessions[i].seats = allSessionsData[j][5];
}
}
}
// Reopen the sessions loop to get the current counts
for(var i=0; i<sessions.length; i++) {
var count = sessions[i].seats;
// Get the current 2D registrations array
for(var j=0; j<allRegsData.length; j++) {
for(var k=0; k<allRegsData[j].length; k++) {
if(sessions[i].date === allRegsData[j][k]) {
count--;
sessions[i].seats = count;
}
}
}
}
// Return the updated array
return sessions;
}
函数将返回18为5/10 4/10日期和24。该脚本正在工作,但我想知道这是否应该浓缩成一个循环,为什么。我知道“最佳实践”是主观的,但是构建一个数组只是为了在同一个函数中立即重新打开它是多余的。
添加数据示例将有助于 – binariedMe
您可以将'sessions [i] .seats = count;'移出双循环,并将其放置在主循环结束之前。或者你可以没有计数,并使用'--sessions [i] .seats;' – Adder