【发布时间】:2014-03-14 04:48:16
【问题描述】:
我孩子的棒球队有 13 个孩子。每个孩子都应该轮流完成这些位置,以便他们在每个位置上都获得相同的时间。顺便说一下,我们有 4 名外野手,因为这些孩子只有 7 岁。
我尝试编写一个小的 Javascript 算法来公平地旋转它们。我想出了以下内容,但它似乎并不像我想象的那么公平,而且令人困惑。我相信有一个更简单的方法。有什么建议吗?
var people = new Array("Amelie","Avery","Brennan","Clayton","Devin","Flynn","Haydn","Jack","Kai","Liam","Max","Maxi","Sterling");
var people_copy = people.slice(0);
var jobs = new Array("Pitcher","Catcher","Third Base","Short Stop","Second Base","First Base","Right Field","Ctr Right","Ctr Left","Left");
var jobs_copy = jobs.slice(0);
var result_set = new Array();
for(i=0;i<jobs_copy.length;i++){
j = i%jobs.length;
result_set[j] = new Object();
for(h=0;h<people_copy.length;h++){
if((jobs[0]) && (people[0])){
jobby = jobs[0].trim();
persony = people[0].trim();
result_set[j][jobby] = persony;
}
var shifted = people.shift();
people.push(shifted);
var jobs_shifted = jobs.shift();
jobs.push(jobs_shifted);
}
var shifted = people.shift();
people.push(shifted);
}
for(i=0;i<result_set.length;i++){
console.log("\nIteration: " + (i+1));
for(h=0;h<jobs_copy.length;h++){
l = jobs_copy[h];
console.log(l + '=' + result_set[i][l]);
}
}
【问题讨论】:
-
为什么不创建两个列表(球员、工作),然后轮换其中一个列表...?即
jobs = [a, b, c],players = [1, 2, 3],然后下周,jobs = [b, c, a],players = [1, 2, 3] -
因为你的工作可能比玩家少,反之亦然。
标签: javascript arrays circular-buffer