我目前正在使用Google Apps脚本,并且希望尽可能均匀地分发数组(例如['MP', 'JE', 'MC', 'GP', 'CZ', 'DM', 'MD']
)以对应多个电子表格行。
假设有21行,我正在使用上面的长度为7
的数组。我想迭代遍历数组的每个条目并输出每个条目3次。
看似简单易行:
var exampleArr = ['MP', 'JE', 'MC', 'GP', 'CZ', 'DM', 'MD'];
function distributeArr(arr, rowLen){
for (i = 0; n = arr.length, i < n; i++){
for (r = 0; r < rowLen / n; r++) {
console.log(arr[i]);
}
}
}
distributeArr(exampleArr, 21);
但是当两个数字不能被完全整除时,它会向上舍入到最接近的匹配。在尽可能保持数组项分布到行的同时处理这个问题的好方法是什么?
答案 0 :(得分:2)
一种方法是获取剩余部分并将其分发给员工。
function distributeArr(staffArr, numOfTasks){
var numOfStaff = staffArr.length;
var extra = numOfTasks % numOfStaff;
var taskPerPerson = parseInt(numOfTasks/numOfStaff);
var assignment = staffArr.map(function(e){
if(staffArr.indexOf(e) < extra){
return [e, taskPerPerson + 1];
}else{
return [e, taskPerPerson];
}
});
assignment.forEach(function(arr){
//create arr[1] rows for staff arr[0]
})
}
var staffArr = ['MP', 'JE', 'MC'];
distributeArr(staffArr, 7); //assignment: [["MP", 3], ["JE", 2], ["MC", 2]]
distributeArr(staffArr, 6); //assignment: [["MP", 2], ["JE", 2], ["MC", 2]]
distributeArr(staffArr, 0); //assignment: [["MP", 0], ["JE", 0], ["MC", 0]]
distributeArr(staffArr, 1); //assignment: [["MP", 1], ["JE", 0], ["MC", 0]]