Javascript:如何将一个数组的组件传输到另一个数组,并限制传输的项目数
我正在创建一个个人培训web应用程序,其中有一系列预定义的任务,称为Javascript:如何将一个数组的组件传输到另一个数组,并限制传输的项目数,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正在创建一个个人培训web应用程序,其中有一系列预定义的任务,称为任务。还有另一个名为sessionTasks的数组,它将包含会话的任务。迄今为止的代码: var tasks = [ ["First Task",1,0], ["Second Task...",4,5], ["Third Task!",0,5] ]; var sessionTasks = [ ] 注意:任务旁边的数字是完成任务所需的分钟和秒数 function setUpSessionTasks() { for(ses
任务
。还有另一个名为sessionTasks
的数组,它将包含会话的任务。迄今为止的代码:
var tasks = [
["First Task",1,0],
["Second Task...",4,5],
["Third Task!",0,5]
];
var sessionTasks = [
]
注意:任务旁边的数字是完成任务所需的分钟和秒数
function setUpSessionTasks() {
for(sessionFull = false, i = 0; sessionFull == false; i++) {
var sessionTasksSeconds = 0;
alert(sessionFull);
//the seconds that exist in the session
sessionTasksSeconds += (sessionTasks[i][1])*60 + sessionTasks[i][2];
alert(sessionTasks[i][0] + sessionTasksSeconds);
//the seconds of the task that's gonna be added
var randTaskNum = Math.floor(Math.random() * tasks.length);
newTaskSeconds = (tasks[randTaskNum][1])*60 + tasks[randTaskNum][2];
//seconds left in the session to fill
var sessionTasksSecondsToFill = 1200 - sessionTasksSeconds;
if((sessionTasksSeconds + newTaskSeconds) < sessionTasksSecondsToFill) {
sessionTasks.push(tasks[randTaskNum]);
} else {
sessionFull = true;
}
alert(sessionFull);
}
}
函数setUpSessionTasks(){
for(sessionFull=false,i=0;sessionFull==false;i++){
var sessionTasksSeconds=0;
警报(会话已满);
//会话中存在的秒数
sessionTasksSeconds+=(sessionTasks[i][1])*60+sessionTasks[i][2];
警报(sessionTasks[i][0]+sessionTasksSeconds);
//要添加的任务的秒数
var randTaskNum=Math.floor(Math.random()*tasks.length);
newTaskSeconds=(tasks[randTaskNum][1])*60多个tasks[randTaskNum][2];
//会话中还有几秒钟要填充
var sessionTasksSecondsToFill=1200-sessionTasksSeconds;
如果((sessionTasksSeconds+newtasksseconds)
我想用上面的代码来填充sessiontask
中的随机任务,直到sessiontask
中的任务时间等于或略低于1200秒。我可能做了一些根本错误的事情,但这个函数只是停止了整个页面的工作,它没有做我想做的事情。我只是把警报放在那里进行测试,第一个有效,但第二个无效,我不明白为什么
如果我要做这一切都是错误的,那么请帮助我走正确的方向,但如果不是,请告诉我这段代码中的错误。多谢各位
旁注:我想不出比这个问题更好的标题了。看起来你把一些事情搞混了:
- 您在一个条目
存在之前就已经在向它添加秒:sessionTasksSeconds
sessionTasksSeconds+=(sessionTasks[i][1])*60+sessionTasks[i][2]代码>
- 在循环的每次迭代中,设置
var sessionTasksSeconds=0代码>。所以你永远不可能达到
1200
- 出于某种原因,您从总秒数中减去了已拥有的秒数(
),然后将其与已拥有的秒数进行比较var sessionTasksSecondsToFill=1200-sessionTasksSeconds;
- 本例中不需要forloop,而
循环就可以了while
- 您将
定义为一个全局变量(在初始赋值之前缺少sessionFull
语句),这可能会带来很多其他问题var
console.log
而不是alert
。这样,您就可以在控制台中看到一个又一个项目,而不必单击每个警报窗口
代码:
var任务=[
[“第一项任务”,1,0],
[“第二项任务…”,4,5],
[“第三个任务!”,0,5]
];
函数setUpSessionTasks(任务){
var sessionTasks=[];
//之前,您总是在循环中覆盖它
var sessionTasksSeconds=0;
//会话中还有几秒钟要填充
var sessionTasksSecondsToFill=1200;
var sessionFull=false;
while(sessionFull==false){
//要添加的任务的秒数
var randTaskNum=Math.floor(Math.random()*tasks.length);
newTaskSeconds=(tasks[randTaskNum][1])*60多个tasks[randTaskNum][2];
如果(sessiontaskseconds+newTaskSeconds)为什么要添加尚未定义的sessiontaskseconds的秒数:sessiontaskseconds+=(sessionTasks[i][1])*60+sessionTasks[i][2];
?您应该使用递归函数在第二个数组中推送第一个数组的随机项,直到达到总时间限制(递归函数应该会中断)这非常有效:-)我唯一做的更改是将变量声明放在setUpSessionTasks()
函数中,它仍然有效。您的答案非常清楚,如果可以的话,我会投更多票:-)
var tasks = [
["First Task",1,0],
["Second Task...",4,5],
["Third Task!",0,5]
];
function setUpSessionTasks(tasks) {
var sessionTasks = [];
// Before you were always overwriting it in your loop
var sessionTasksSeconds = 0;
//seconds left in the session to fill
var sessionTasksSecondsToFill = 1200;
var sessionFull = false;
while(sessionFull === false) {
//the seconds of the task that's gonna be added
var randTaskNum = Math.floor(Math.random() * tasks.length);
newTaskSeconds = (tasks[randTaskNum][1])*60 + tasks[randTaskNum][2];
if(sessionTasksSeconds + newTaskSeconds <= sessionTasksSecondsToFill) {
sessionTasksSeconds += newTaskSeconds;
sessionTasks.push(tasks[randTaskNum]);
//the seconds that exist in the session
console.log(sessionTasksSeconds);
} else {
console.log('Session full');
sessionFull = true;
}
}
}
setUpSessionTasks(tasks);