【发布时间】:2015-07-13 07:40:45
【问题描述】:
我正在尝试制定一年的员工时间表,一周中的不同日子需要不同数量的员工。我想将名册输出到 Google 电子表格中
我的方法是创建一个包含所有员工姓名的数组,然后在一年中的每一天从员工数组中删除 x 个姓名。 X 等于 staff.length - 今天需要多少人。
我已经编写了代码,但我的输出不是我所期望的。第一天看起来是正确的,但随后的每一天都返回一个空数组。
var staff 在 LoC3 上初始化和分配。但是在 LoC12 上,当我有日志输出 staff 中的内容时,我看到一个空数组。我可以看到将一个空数组分配给 rosterToday 是生成的 rosterFull 是如何为空的,但我不明白将 staff 设置为什么[, , , , , , ]
此外,如果我取消 LoC17 (rosterToday[i] = ""),staff 的幻像重新分配似乎消失了。
有谁知道我在这里做错了什么?
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);
}
我知道这将始终优先考虑人员数组中的前几个人员,但我已经有代码可以对它们进行洗牌。这只是一些孤立的行。
【问题讨论】:
-
Array.slice() 是你的朋友。
-
我可以,但我希望这些元素在内部/今天数组中保留为空白,因此当我调用 setValues() 时,实际的工作人员仍然在列中对齐。
-
您接近员工名册的方式总是从员工列表的“左侧”中挑选 - 这是您想要的吗?亚当总是被选中,而加里只有 3 次?
标签: javascript arrays google-apps-script