OP 想要创建一个审查矩阵,其中随机选择被审查员工的姓名,审查者不能审查自己,并且该矩阵针对 46 名员工完成。
在之前的代码的基础上,这个版本为每一行构建了一个员工姓名数组,其中审阅者的姓名不包含在数组中。随机选择五个名称并应用于审阅者。然后循环在 46 名员工中的每一个中重复。
例如,在第一轮评论中,从随机选择“reviewees”的员工数组中省略了“name01”。在第二轮中,“name01”被包括在内,但“name02”被排除在员工数组之外。以此类推,在每种情况下,用于随机选择五个评论的员工数组的长度始终为 45 个名称,并且不包括评论者的姓名。
随机选择要评分的名字并不能确保员工之间的评价平等和平均分配。虽然每个员工都会进行 5 次审核,但有的员工被审核超过 5 次,有的不到 5 次,并且(取决于日月星辰的排列方式)有可能无法被选中进行审核.
function s05648755803(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "Sheet3";
var sheet = ss.getSheetByName(sheetname);
// some variables
var randomcount = 30; // how many random names
var rowstart = 7; // ignore row 1 - the header row
var width = 5; // how many names in each row - 1/rater plus 5/ratee
var thelastrow = sheet.getLastRow();
//Logger.log("DEBUG:last row = "+thelastrow)
// get the employee names
var employeecount = thelastrow-rowstart+1;
//Logger.log("DEBUG: employee count = "+employeecount);//DEBUG
// get the data
var datarange = sheet.getRange(rowstart, 1, thelastrow - rowstart+1);
//Logger.log("DEBUG: range = "+datarange.getA1Notation());//DEBUG
var data = datarange.getValues();
//Logger.log("data length = "+data.length);
//Logger.log(data);
var counter = 0;
var newarray = [];
for (c = 0;c<46;c++){
counter = c;
for (i=0;i<data.length;i++){
if(i!=counter){
newarray.push(data[i]);
}
}
//Logger.log(newarray);
var rowdata = [];
var results = selectRandomElements(newarray, 5);
Logger.log(results)
rowdata.push(results);
var newrange = sheet.getRange(rowstart+c, 3, 1, 5);
newrange.setValues(rowdata);
// clear the arrays for the next loop
var newarray=[];
var rowdata = []
}
}
/*
// selectRandomElements and getRandomInt
// Credit: Vidar S. Ramdal
// https://webapps.stackexchange.com/a/102666/196152
*/
function selectRandomElements(fromValueRows, count) {
var pickedRows = []; // This will hold the selected rows
for (var i = 0; i < count && fromValueRows.length > 0; i++) {
var pickedIndex = getRandomInt(0, fromValueRows.length);
// Pick the element at position pickedIndex, and remove it from fromValueRows. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
var pickedRow = fromValueRows.splice(pickedIndex, 1)[0];
// Add the selected row to our result array
pickedRows.push(pickedRow);
}
return pickedRows;
}
function getRandomInt(min,
max) { // From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
截图#1
![截图#1](https://i.stack.imgur.com/ejqqP.jpg)
截图#2
![截图#2](https://i.stack.imgur.com/a8wmX.jpg)