以下函数将用户输入用于用户所选范围的开始和结束课程,然后使用循环拉取每个课程数组(从数组数组中),然后随机将其拼接成新数组。例如,选择课程3到5的最终结果是新数组(randArray)具有随机化范围内每个课程的所有数据,前三个,然后是四个,然后是五个。这一切都很好,但我可以想象这可能不是最有效的方法。从现有阵列的子集创建新阵列的最紧凑和有效的方法是什么?由于它很好用,我很满意,但是会很有兴趣学习更好的方法,并知道为什么它们更好(除了更紧凑)。我选择了这种方法,因为已经有很多代码只使用一个数组的单个课程,这使我可以在不更改任何其他代码的情况下为该数组添加一系列课程。
function initializeRange():void {
for (i = startLesson; i < (endLesson + 1); i++) {
switch (i) {
case 1:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
case 2:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
case 3:
duplicate = elementArray[i].slice(0);
while (duplicate.length > 1 ) {
randArray.push(duplicate.splice(Math.ceil(Math.random() *
(duplicate.length - 1)), 1)[0]);
}
break;
//case "etc.":
//and so on for the rest of the lessons
}
}
}
答案 0 :(得分:0)
您可以使用push.apply
或concat
。
他们都在做同样的事情 - 向特定数组添加元素,提供另一个数组的子集。无论哪种方式,您都必须选择(splice
)您需要添加的子集。
这两种方法更好,因为您不需要遍历所有项目(可能是数千种)。