2016-08-30 61 views
-1

被要求定義一個函數,它需要一個HTML表格,其中包含一個人的年齡和體重,並返回給定年齡範圍內人的所有體重的模式。該函數應該適用於任何長度的表格。根據某個人的年齡過濾行,然後轉換數組中所有符合條件的行(即,提取過濾的權重列),最好的方法是什麼?我想要做以下事情,但我意識到我不能使用方括號表示法引用HTML表格。 JavaScript中的HTML表格有什麼可比性?我有興趣學習如何在Javascript中使用HTML表格的最佳方式,這個問題的細節並不重要。表格和Javascript:哪些格式最好?我如何從表中提取數組?

function birthWeightByAge(ageWeightTbl, rowCount, minVal, maxVal) { 
 
    var weightArray = []; 
 
    //Traverse table by row 
 
    for (var i =0; i < rowCount; i++) { 
 
     //Determine age and weight for this row. Can I use this approach with different syntax? Do I need to use a completely different approach? 
 
     var age = ageWeightTbl[i][0]; 
 
     var weight = ageWeightTbl[i][1]; 
 
     //Check if the baby weight in this row meets the requirements 
 
     if (weight > minVal && weight < maxVal) { 
 
      //If it does, add the age and weight to our holding arrays 
 
      ageArray.push(age); 
 
      weightArray.push(weight); 
 
     } 
 
    } 
 
    
 
    var weightMode = mode(weightArray); 
 
    }

邊問:是否有將呈現一個HTML頁面上的數據格式,但很容易在Javascript一起工作呢?如果是,請提供關於其好處及其工作原理的高級概述。

我添加了一個示例表的要求:

//Helper function that creates a mock table for testing 
 
function generate_table(rows) { 
 
    // get the reference for the body 
 
    var body = document.getElementsByTagName("body")[0]; 
 
    
 
    // creates a <table> element and a <tbody> element 
 
    var tbl  = document.createElement("table"); 
 
    var tblBody = document.createElement("tbody"); 
 
    
 
    // creating all cells 
 
    for (var i = 0; i < rows; i++) { 
 
    // creates a table row 
 
    var row = document.createElement("tr"); 
 
    
 
    for (var j = 0; j < 2; j++) { 
 
     // Create a <td> element and a text node, make the text 
 
     // node the contents of the <td>, and put the <td> at 
 
     // the end of the table row 
 
     var cell = document.createElement("td"); 
 
     if (j<1) { 
 
      var cellText = document.createTextNode(""+Math.round(100*Math.random())+""); 
 
     } 
 
     else { 
 
      var cellText = document.createTextNode(""+Math.round(10*Math.random())+""); 
 
     } 
 
     cell.appendChild(cellText); 
 
     row.appendChild(cell); 
 
    } 
 
    
 
    // add the row to the end of the table body 
 
    tblBody.appendChild(row); 
 
    } 
 
    
 
    // put the <tbody> in the <table> 
 
    tbl.appendChild(tblBody); 
 
    // appends <table> into <body> 
 
    body.appendChild(tbl); 
 
    // sets the border attribute of tbl to 2; 
 
    tbl.setAttribute("border", "2"); 
 
} 
 

 
//Sample Output: {"Mode": 9}

+1

如果你定義一個模擬表集合,該函數將採取什麼以及你期望從該函數返回什麼,這將是有幫助的。 –

+0

我已經添加了示例表和示例輸出的代碼。 –

回答

0

試試這個:給你的表中的id屬性(我添加下面一行到你的「模擬表」功能: tbl.id = "weightAgeTable";)。

然後調用下面的函數,使用id值作爲第一個參數:

function birthWeightByAge(tableId, rowCount, minVal, maxVal) { 
    var weightArray = []; 
    var ageArray = []; 
    var tbl = document.getElementById(tableId); 

    //Traverse table by row 
    for (var i =0; i < rowCount; i++) { 

     //Determine age and weight for this row 
     var weight = tbl.rows[i].cells[0].innerHTML; //var weight = ageWeightTbl[i][1]; 
     var age = tbl.rows[i].cells[1].innerHTML; //var age = ageWeightTbl[i][0]; 

     //Check if the baby weight in this row meets the requirements 
     if (weight > minVal && weight < maxVal) { 
      //If it does, add the age and weight to our holding arrays 
      ageArray.push(age); 
      weightArray.push(weight); 
     } 
    } 

    console.log(weightArray); // var weightMode = mode(weightArray); 
} 

我沒有你mode功能,所以我評論它,並輸出陣列控制檯相反,演示目的。

此外,我認爲你的「模擬表」功能可能已經顛倒了列,這就是爲什麼我的.cells數字與你的相反。

+0

謝謝!這太棒了。比我找到的其他任何東西都簡單。 –