Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构建和更新阵列对象_Javascript - Fatal编程技术网

Javascript 构建和更新阵列对象

Javascript 构建和更新阵列对象,javascript,Javascript,我正在开发一个简单的注册系统,它可以显示特定车间的可用座位数。它内置于GoogleApps脚本中,使用JavaScript语法运行 当用户登录时,我为他们构建一个Class对象数组。其中一个对象键是座椅,它显示车间中剩余的可用斑点数。为了达到这个目的,我将类的主列表与当前注册列表进行比较,以获得最大注册人数 类对象 [{ date: 4/10/2017, title: "Workshop 1", desc: "A string description for 1", seats

我正在开发一个简单的注册系统,它可以显示特定车间的可用座位数。它内置于GoogleApps脚本中,使用JavaScript语法运行

当用户登录时,我为他们构建一个
Class
对象数组。其中一个对象键是
座椅
,它显示车间中剩余的可用斑点数。为了达到这个目的,我将类的主列表与当前注册列表进行比较,以获得最大注册人数

类对象

[{ 
  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 |
|       |           |           |
脚本

[{ 
  date: 4/10/2017,
  title: "Workshop 1",
  desc: "A string description for 1",
  seats: ""
}]
//设置count变量
var计数;
//用户未注册的会话

对于(var i=0;i用户类别表的设计很糟糕,因为您无法轻松容纳参加3个类别的用户。以下内容更为可取,也会使代码更简单:

| user  | class     |
|-------|-----------|
| user1 | 4/10/2017 |       
| user2 | 4/10/2017 | 
| user2 | 5/10/2017 |
|       |           | 

另外,不要使用
count
,使用
--sessions[i].seats;
作为
sessions[i].seats
=
count
以下是我重构它的方法,这肯定是主观的,但我喜欢使用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
,因为就我个人而言,如果我不关注索引,那么思考问题就更容易了。此外,由于您再次更新会话的每个值,您可以将其保留在第一个循环中。据我所知,您真正想要做的就是获取座位数据,然后根据其他数据收集(可能是我错了,我没有测试或使用任何数据运行此代码)。

添加数据样本将有助于您将
会话[I].seats=count;
移出双循环,并将其放置在主循环的末尾。或者您可以不进行计数,使用
--sessions[I].seats;
是的,这是一个粗略的第一步。现在,表单
对象在电子表格中作为一行发送。我需要添加一个循环以将它们添加到工作表中。