gpt4 book ai didi

javascript - 构建和更新数组对象

转载 作者:行者123 更新时间:2023-12-03 04:41:27 24 4
gpt4 key购买 nike

我正在开发一个简单的注册系统,该系统显示特定研讨会中可用的座位数。它内置于 Google Apps 脚本中,使用 JavaScript 语法运行。

我在用户登录时为他们构建了一个 Class 对象数组。其中一个对象键是 seats,它显示了座位中剩余的可用座位数。作坊。为此,我将类(class)主列表进行比较,以获取当前注册列表的最大注册人数。

类对象

[{ 
date: 4/10/2017,
title: "Workshop 1",
desc: "A string description for 1",
seats: ""
}]

Google 表格

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

该函数将为 4/10 日期返回 18,为 5/10 日期返回 24。该脚本正在运行,但我想知道是否应该将其压缩为一个循环以及为什么。我知道“最佳实践”是主观的,但构建一个数组只是为了在同一函数中立即重新打开它感觉多余。

最佳答案

以下是我如何重构它,这绝对是主观的,但我喜欢使用 es6,因为它很容易看懂。

function refactor(sessions) {

// Sessions the user is not registered for
sessions.forEach(session => {

// update seats based on allSessionsData
allSessionsData.forEach(sessionData => {
if (session.date === sessionData[0]) {
sessions.seats = sessionData[5];
}
});

// update seats based on allRegsData
allRegsData.forEach(allRegs => {
allRegs.forEach(reg => {
if (session.date === reg) {
session.seats--;
}
});
});

});

return sessions;
}

所以我删除了 for 循环并使用了 foreach 因为对我个人来说,如果我不关注索引,它会让我更容易思考问题。此外,由于您要再次更新 session 的每个值,因此您可以将其保留在第一个循环中。据我了解,您真正想做的就是获取座位数据,然后根据另一个数据集合进行计数(我可能是错的,我没有使用任何数据测试或运行此代码)。

关于javascript - 构建和更新数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43070130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com