hi @v-litu-msft
What the script does is to create an array of object, shuffle it, and get the top items in the list.
I tried recreating it as well.
Here is the script:
function main(workbook: ExcelScript.Workbook, top: number = 1😞 Result {
let selectedSheet = workbook.getWorksheet("Participant");
let selectedRange = selectedSheet.getRange("A1").getSurroundingRegion().getValues();
let pool: Winner[] = [];
for (let i = 1; i < selectedRange.length; i++) {
let range = selectedRange[i];
let upinO = range[3].toString();
pool.push({
upin: upinO.substring(0,upinO.indexOf('@')),
name: range[4].toString(),
department: range[5].toString(),
eligibility: range[7].toString(),
});
}
var shuffledPool = shuffle(pool.filter(isEligible));
console.log(shuffledPool);
console.log(shuffledPool.slice(0, top));
let result = {
eligibleCount: shuffledPool.length,
winners :shuffledPool.slice(0, top)
};
console.log(result);
return result;
}
interface Result{
winners: Winner[];
eligibleCount: number;
}
interface Winner {
name: string;
upin: string;
department: string;
eligibility: string;
}
function isEligible(element, index, array) {
return (element.eligibility == 'ok');
}
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}