设置一个空的数组索引

我有一个数组,可以为给定的问题保存学生的答案。

如果学生给出答案,它会被插入到当前索引的数组中,如answers[questionindex] = answer

后来,我可以读取数组,并映射到给定的问题数组的条目

这个案例:

 [ "answer", undefined, // student has not given answer "answer2", ] 

作品。 (循环数组,只需输出“没有给出答案” if (answers[questionindex] === undefined)

但是当最后的回答没有定义(1个或更多)时,它不起作用(当然)。

我怎么能设置这些领域undefined (如,在计时器达到零后),以显示没有给出答案?

现在,平均计算显示100%正确给予(正确),然后2没有给出

 var testResults = { addRoom: function(Id, teacher) { // room pseudoconstructor this[Id] = { created: moment(), runningProblem: false, time: 0, // holds the countdown for the current problem getTime: function() { // returns the countdown-counter return this.time; }, Id: Id, teacher: teacher, getCurrentSolution: function() { return math.eval(this.testProblems[this.getCurrentProblemIndex()].problem); }, getTimeTaken: function() { return this.getCurrentProblemTimeLimit() - this.time; }, getCurrentProblemTimeLimit: function() { return this.testProblems[this.getCurrentProblemIndex()].timeLimit; }, getCurrentProblemIndex: function() { return this.testProblems.length - 1; }, addTestProblem: function(problem, timeLimit) { var solution = math.eval(problem); this.testProblems.push({problem: problem, timeLimit: timeLimit, solution: solution}); console.dir(this.testProblems); }, testProblems: [], updatePercentages: function(name) { function round(num) { return +(Math.round(num + "e+2") + "e-2"); } console.log('updating percentages'); console.log('answers length ' + this.students[name].givenAnswers.length); var timeSum = 0; for(var i = 0; i < this.students[name].givenAnswers.length; i++ ) { timeSum += this.students[name].givenAnswers[i].takenTime; } var timeAvg = timeSum / this.students[name].givenAnswers.length; console.log('timeAvg for ' + name + ' ' + timeAvg); this.students[name].avgTime = round(timeAvg); var correctSum = 0; for(var j = 0; j < this.students[name].givenAnswers.length; j++ ) { if (this.students[name].givenAnswers[j].correct) { correctSum++; } } var correctAvg = correctSum / this.students[name].givenAnswers.length; console.log('correctAvg for ' + name + ' ' + correctAvg); this.students[name].avgCorrect = round(correctAvg) * 100; }, addGivenStudentAnswer: function(name, answer, takenTime, index) { console.log('adding answer ' + name + ' ' +answer+ ' ' + takenTime); var correct = this.getCurrentSolution() == answer; if (typeof this.students[name].givenAnswers[index] === 'undefined') { this.students[name].givenAnswers[index] = ({ answer: answer, takenTime: takenTime, correct: correct }); this.updatePercentages(name); //console.dir(this.students[name].givenAnswers); return true; } else { console.log('attempt at double answer. not saved'); return false; } }, addStudent: function(name) { if (!(this.students[name])) { this.students[name] = { studentName : name, avgTime: 0, avgCorrect: 0, givenAnswers: [] } } console.dir(this); }, students: {} }; console.dir(this); }, deleteRoom: function(Id) { delete this[Id]; console.log('room deleted from testResults'); } }; 

// after test

 var name = socket.userName; var room = socket.room; var created = testResults[room].created; var students = testResults[room].students; var problems = testResults[room].testProblems; var test = new tests({ roomId : room, created : created, teacher : name, students : students, problems : problems }); test.save(function(err, result) { if (err) {console.log(err);} else { console.log('test saved to DB'); socket.emit('testSaved'); // delete from roomList testRooms.deleteRoom(room, name); // delete from resultObject testResults.deleteRoom(room); // answer io.in(room).emit('room Closed'); } }); 

从战后数据库中读取testing的路线

 router.get('/showtests/:roomId', function(req, res) { if (req.user && req.user.role === 'teacher') { tests.findOne({roomId: req.params.roomId}, {}, function(err, result) { if (err) {console.log(err);} res.render('showSingleTest', {user: req.user, testData: JSON.parse(JSON.stringify(result))}); }) } else { res.render('customerror', { title: "Error", errMsg1: "error.error", errMsg2: "error.notLoggedIn" }); } }); 

aaaaa和玉

 h2(data-i18n="markup.studentsAnswers") each student in testData.students .testViewSingleStudentAnswers.col-md-6 h3 #{student.studentName} ol.answers each answer in student.givenAnswers if (answer) if (answer.correct == true) li.correct span #{answer.answer} | &nbsp;&nbsp;&nbsp; span.floatRight (#{answer.takenTime}s) else li.wrong span #{answer.answer} | &nbsp;&nbsp;&nbsp; span.floatRight (#{answer.takenTime}s) else li.noAnswer(data-i18n="markup.noAnswerGiven") .testTotals | #{student.avgCorrect} span(data-i18n="markup.percentCorrect") | ,&nbsp; | #{student.avgTime} span(data-i18n="markup.avgTime") 

你可以这样做:

 function push_answer(answer){ answer = answer || "undefined" array_of_answers.push(answer) } 

现在,这个值不是未定义的,而是由文字定义的。 你可以用一些unicode字符replace它,以防某些答案可能是“未定义的”。

祝你今天愉快!

似乎没有问题为我工作。

HTML:

 <div id="content"> </div> 

JS:

 var answers = ["answer1","answer2",undefined,"answer3",undefined]; for(i=0;i<answers.length;i++) { if(!answers[i]){ answers[i]="no answer"; } } document.getElementById('content').innerHTML = answers; 

的jsfiddle

我个人的build议:“永远不要让事情变得偶然”

如果学生没有select答案,那么应该用空格填充空格,因为undefined真的很烦人,所以为了填补空白:

这将检查答案是否是“未定义的”,并用“(空白)填补空白,然后,当你检查答案时,将更容易评估…

 if(answer) answers[questionindex] = answer; else answers[questionindex] = '';