如何解决使用数组数组创建多对一关系
我正在创建一个教师教学计划,该计划应分配多个且唯一的教师来教另一位老师。
我正在使用一个数组数组来捕获和随机分组和教师列表。在此脚本中,我使用了3个级别的数组。这对于一长串和很多小组来说效率低下吗?
ScrollBar.LineUpCommand
我已经能够将一位老师与另一位老师配对。
ScrollBar.LineDownCommand
但是,我不相信我会使用以下内容建立多对一关系
//Shuffle and create groups
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i],a[j]] = [a[j],a[i]];
}
return a;
}
const Tgroups = [[3,[1,2]],[4,[5,6]],[7,[8,9]],[10,[11,12]]];
//const Tgroups = [[1,2],6],9],12]];
Tgroups.forEach(shuffle);
shuffle(Tgroups);
console.log("shuffled:",Tgroups.join(" | "))
const Tlist = [].concat(...Tgroups);
console.log("Tlist:",Tlist);
请,有没有一种方法可以达到更好的效果?
解决方法
我想使您的代码可运行:
/* PART 1 */
//Shuffle and create groups
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i],a[j]] = [a[j],a[i]];
}
return a;
}
const Tgroups = [
[3,[1,2]],[4,[5,6]],[7,[8,9]],[10,[11,12]]
];
//const Tgroups = [[1,2],6],9],12]];
Tgroups.forEach(shuffle);
shuffle(Tgroups);
console.log("shuffled:",Tgroups.join(" | "))
const Tlist = [].concat(...Tgroups);
console.log("Tlist:",Tlist);
/* PART 2 */
// match the group with the list:
const pairs = [];
for (let i = 0; i < Math.floor(Tlist.length / 2); i++) {
pairs.push([
Tlist[i],Tlist[i + Math.floor(Tlist.length / 2)]
]);
}
if (Tlist.length % 2)
pairs.push([Tlist.pop()]);
console.log("pairs:",pairs.join(" | "));
const result = [].concat(...pairs);
console.log('result:',JSON.stringify(result));
/* PART 3 */
for (let i = 0; i < result.length; i++) {
var innerArrayLength = result[i].length;
for (let j = 0; j < innerArrayLength; j++) {
//console.log('[' + i + ',' + j + '] = ' + result[i][j]);
console.log(result[i] + " -> " + result[(i + 2) % result.length]);
}
}
因此,您将以下数组作为输入:
[[3,12]]]
此数组作为输出:
[[1,3,4,10,7,12]]
但是您以一种非常奇怪的方式进行迭代,因此console.log
的实际输出为:
1,2 -> 3
1,2 -> 3
5,6 -> 4
5,6 -> 4
8,9 -> 7
8,9 -> 7
11,12 -> 5,6
11,6
您实际上想实现什么?很难理解任务...
但是,乍一看,您需要先对第一个数组进行展平,然后对结果进行混洗,在这两个步骤中,您将获得所需的输出。
让我尝试一下:
const Tgroups = [[3,12]]];
const flatInput = Tgroups.flat(1);
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i],a[i]];
}
return a;
}
const result = shuffle(flatInput);
for (let i = 0; i < result.length; i++) {
var innerArrayLength = result[i].length;
if (innerArrayLength) {
console.log(result[i] + " -> " + result[(i + 2) % result.length]);
}
}
所以我们用更少的代码就能得到相同的结果,但是我不明白这里发生了什么:|
,仅显示100个人的情况:
const totalPeople = 100;
// based on comments,you know,that actually we will teach only half of the people
const result = [];
for (let i = 0; i < totalPeople / 2; i++) {
if (i % 2 == 0)
result.push('' + (i * 2 + 1) + ',' + (i * 2 + 3) + '->' + (i + 2));
else
result.push('' + (i * 2) + ',' + (i * 2 + 2) + '->' + (i));
}
document.getElementById('result').innerHTML = result.join('<br>');
<div id="result"></div>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。