簡體   English   中英

Google Apps腳本變量重新分配

[英]Google Apps Script Variable Reassignment

我正在嘗試制定一年的員工時間表,在一周的不同日期需要不同數量的員工。 我想將花名冊輸出到Google電子表格中

我的方法是創建一個包含所有職員姓名的數組,然后在一年中的每一天中,從職員數組中刪除x個姓名。 X等於staff.length-今天需要多少人。

我已經編寫了代碼,但輸出卻不是我期望的。 第一天看似正確,但隨后的每一天都會返回一個空數組。

var 人員已在LoC3上初始化和分配。 但是在LoC12上,當我有日志輸出時,在工作人員中我看到的是一個空數組。 我可以看到,將一個空數組分配給rosterToday就是生成的rosterFull如何為空的方式,但是我不明白是什么將staff設置為[ ,,,,,,, ]

此外,如果我刪除LoC17(rosterToday [i] =“”),則幻影般的人員調動似乎消失了。

有人知道我在做什么錯嗎?

function RosterTest()
{
  var staff = ["Adam", "Bob", "Chris", "Dave", "Ed", "Fred", "Garry"];
  var dailyRequirement = [0, 6, 7, 7, 7, 6, 2]; // num staff needed today
  var rosterFull = []; // push each day's roster in here
  var period = 7; // test with only 7 days, then ramp up to 365

  for (var d=0; d<period; d++)
  {
    var rosterToday = staff; // initially start with the full roster
    var reduce = staff.length - dailyRequirement[d];
    Logger.log("d="+d+" staff="+staff);
    // when d>=1 staff becomes [, , , , , , ]

    for (var i=0; i<reduce; i++)
    {
      rosterToday[i] = "";
    }
    rosterFull.push(rosterToday);
  }
  for (var i=0; i<rosterFull.length; i++)
  {Logger.log(rosterFull[i]);} // shows an arr of len 7 with empty arrs

  // spreadsheet.getRange(row, col, height, width).setValues(rosterWeek);
}

我知道這總是會優先考慮人員數組中的前幾個人員,但是我已經有了將它們改組的代碼。 這只是一些孤立的線。

我不確定為什么staff數組看起來是空的,但是我認為將二維數據集分配給一維數組可能會產生效果。 您希望變量rosterFull包含每天所需的名稱。 這意味着您需要一個具有7 X每天所需人員數量的數組。

function RosterTest()
{
   var staff = ["Adam", "Bob", "Chris", "Dave", "Ed", "Fred", "Garry"];
   var dailyRequirement = [0, 6, 7, 7, 7, 6, 2]; // num staff needed today
   var period = 7; // test with only 7 days, then ramp up to 365
   var rosterFull = new Array(7); // create an array with 7 rows that represent the 7 days of the week

  for (var d=0; d<period; d++)
  {

    var rosterToday = [];

    for(var i=0; i<dailyRequirement[d]; i++){
      rosterToday[i] = staff[i];
    }

    rosterFull[d] = rosterToday; //assign the array with the required staff to the corresponding day.

  }

}

我不了解變數減少。 這將為您提供今天不需要的人員數量,而我想您想要的是所需的人員數量。

沒有弄清楚您要問的是您實際想要做什么,是因為第一次生產線導致staff空缺的原因

rosterToday = staff;

這將職員指定為對rosterToday的引用-因此,所有rosterToday[i]所做的也適用於staff 您需要將rosterToday復制。

rosterToday = staff.slice(); //makes a shallow copy of the array

這將解決該特定問題。

除此之外,您還可以使用Array.slice()復制那里的內容

var rosterToday = [];
var rosterLength = staff.length;

for (var d = 0; d < dailyRequirement.length; d += 1) {

  rosterDay = staff
                .slice(0,dailyRequirement[d]-1)
                .concat(Array(rosterLength - d));
  rosterFull.push(rosterDay)

}

但是我不相信這是您想要做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM