[英]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.