2016-11-03 65 views
1
function studentClasses() { 
    var names = []; 
    var course = []; 
    var sortCourse = []; 
    var uniqueCourse = []; 
    var nameCourse = []; 

    while (records.readNextRecord()) { 
     var studentNames = records.getStudentName(); 
     var studentCourse = records.getStudentCourseNumber(); 

     names.push(studentNames); 
     course.push(studentCourse); 
     sortCourse.push(studentCourse); 
     sortCourse.sort(); 
    } 
    // sort a list of courses to find the unique courses 
    for (var i = 0; i < sortCourse.length; i++) { 
     if (sortCourse[i] !== sortCourse[i - 1]) { 
      uniqueCourse.push(sortCourse[i]); 
     } 
    } 

    uniqueCourse.sort; 
    nameCourse.length = uniqueCourse.length; 

    // create multi-d array containing names for a certain course 
    for (var x = 0; x < uniqueCourse.length; x++) { 
     for (var y = 0; y < course.length; y++) { 
      if (uniqueCourse[x] === course[y]) { 
       nameCourse[x].push(names[y]); 
      } 
     } 
    } 
} 

這是我的代碼,我的工作和我收到的推值,並得到一個錯誤

Uncaught TypeError: Cannot read property 'push' of undefined(…)

錯誤我有兩個陣列(」 當然「&」名稱「)包含具有特定索引中的數據的信息。我試圖將我的「uniqueCourse」數組中的信息與我的「course」數組進行比較,如果它們匹配,則將使用「course」的索引位置來調用來自「 名稱「。

這裏是問題所在: 當我試圖推動「名稱[Y]」到一個多維數組,將具有等於uniqueCourse(這是5,如果代碼是RAN)的長度,我得到錯誤。

問: 爲什麼我收到一個未定義的錯誤,當我嘗試使用代碼

nameCourse[x].push(names[y]); 

將信息推送到nameCourse其中x是相應級別我希望這些名稱被存儲?

我想:

nameCourse = [ [however many names called from names[y]], 
       [however many names called from names[y]], 
       [however many names called from names[y]], 
       [however many names called from names[y]], 
       [however many names called from names[y]] ] 

回答

0

nameCourse陣列充滿undefined 需要初始化nameCourse [X]是一個數組,然後才推了進去。 類似下面:

nameCourse = new Array(uniqueCourse.length).fill(0);

+0

所以在做這樣的事情 nameCourse [X] = [] –

+0

是的。同樣的事情 – DanielS

+0

非常感謝你的幫助 –