如何改进我的JavaScript代码?

时间:2016-10-22 12:45:38

标签: javascript optimization

我编写了以下代码,用于生成包含随机数的表,并想询问是否有任何方法可以优化/增强/模块化JavaScript代码,尤其是addColumnaddRow函数。

这是HTML代码:

<body  onload="initlization()">
<form>
<input type="button" class="button" value="Add Row" onclick="addRow()" />
<input type="button" class="button" value="Delete Row" onclick="deleteRow()" />
<input type="button" class="button" value="Add column" onclick="addColumn()" />
<input type="button" class="button" value="delete column" onclick="deleteColumn()" />    
</form>
<table>
<tr>
    <td></td> 
    <td> </td> 
</tr>
<tr> 
    <td> </td>
    <td> </td>
 </tr>
</table>
</body>

这是JavaScript代码:

var blocks;
var myTable;
var nums = [];

function initlization() {
  myTable = document.getElementsByTagName("table")[0];
  shuffle(); //need to shuffle initially 
}

function shuffle() {
  //need to get all tds each time the table is shuffled
  blocks = document.getElementsByTagName("td");
  tableSize = blocks.length;
  shuffledArray(0, tableSize);
  for (var i = 0; i < tableSize; i++) {
    blocks[i].innerHTML = '<span draggable="true">' + nums[i] + '</span>';
  }
}

function addColumn() {
  // Getting current table size by multiplying number of rows by number of   columns
  tableSize = (myTable.rows.length) * (myTable.rows[0].cells.length);
  // Getting new table size by adding the number of rows
  newTableSize = tableSize + (myTable.rows.length);
  shuffledArray(tableSize, newTableSize);
  index = Math.floor(Math.random() * (myTable.rows[0].cells.length) + 1);
  for (var i = 0; i < myTable.rows.length; i++) {
    myCell = myTable.rows[i].insertCell(index);
    myCell.innerHTML = '<span draggable="true">' + nums[i] + '</span>';
  }
}

function addRow() {
  tableSize = (myTable.rows.length) * (myTable.rows[0].cells.length);
  newTableSize = (myTable.rows.length + 1) * (myTable.rows[0].cells.length);
  shuffledArray(tableSize, newTableSize);
  index = Math.floor(Math.random() * (myTable.rows.length) + 1);
  var row = myTable.insertRow(index);
  for (var i = 0; i < myTable.rows[0].cells.length; i++) {
    var myCell = row.insertCell(i);
    myCell.innerHTML = '<span draggable="true">' + nums[i] + '</span>';

  }
}

function deleteColumn() {
  var allRows = myTable.rows;
  if (allRows[0].cells.length > 2) {
    for (var i = 0; i < allRows.length; i++) {
      allRows[i].deleteCell(-1);
    }
    shuffle();
  }
}

function deleteRow() {
  if (myTable.rows.length > 2) {
    myTable.deleteRow(0);
    shuffle();
  }
}
function shuffledArray( from,  to) {
    for(i=from; i<to;i++){
        nums[i-from]=i;
        }
    for (var i = to-from; i; i--) {
        j= Math.floor(Math.random() *i);

        [nums[i - 1], nums[j]] = [nums[j], nums[i - 1]];
        }
}

1 个答案:

答案 0 :(得分:0)

以下测试代码

&#13;
&#13;
<!DOCTYPE html>
<html>
<head><title>Random Table</title></head>
<body>
<form>
<input type="button" class="button" value="Add Row" onclick="addRow()" />
<input type="button" class="button" value="Delete Row" onclick="deleteRow()" />
<input type="button" class="button" value="Add column" onclick="addColumn()" />
<input type="button" class="button" value="delete column" onclick="deleteColumn()" />    
</form>
<table>
<tr>
    <td></td> 
    <td> </td> 
</tr>
<tr> 
    <td> </td>
    <td> </td>
 </tr>
</table>
<script>
var blocks;
var myTable = document.getElementsByTagName("table")[0];
var nums=[];
initlization();
function initlization(){
    myTable = document.getElementsByTagName("table")[0];
    shuffle();//need to shuffle initially 
}

function shuffle(){
    //need to get all tds each time the table is shuffled
    blocks=document.getElementsByTagName("td");
    tableSize=blocks.length;
    shuffledArray(0,tableSize);
    for(var i=0;i<tableSize;i++){
            blocks[i].innerHTML='<span draggable="true">'+ nums[i] +'</span>';
    } 
  }

function addColumn()
{
    // Getting current table size by multiplying number of rows by number of   columns
    tableSize=(myTable.rows.length)*(myTable.rows[0].cells.length);
    // Getting new table size by adding the number of rows
    newTableSize=tableSize+(myTable.rows.length);
    shuffledArray(tableSize,newTableSize);
    index= Math.floor(Math.random()*(myTable.rows[0].cells.length)+1);
    for (var i=0; i<myTable.rows.length; i++) {
        myCell=myTable.rows[i].insertCell(index);
        myCell.innerHTML= '<span draggable="true">'+ nums[i] +'</span>';
    }
shuffle();
}

function addRow() {
    tableSize=(myTable.rows.length)*(myTable.rows[0].cells.length);
    newTableSize=(myTable.rows.length+1)*(myTable.rows[0].cells.length);
    shuffledArray(tableSize,newTableSize);
    index= Math.floor(Math.random()*(myTable.rows.length)+1);
    var row = myTable.insertRow(index);
    for (var i=0; i<myTable.rows[0].cells.length; i++) {
        var myCell=row.insertCell(i);
        myCell.innerHTML= '<span draggable="true">'+ nums[i] +'</span>';


    }
shuffle();
}

function deleteColumn()
{
    var allRows = myTable.rows;
    if (allRows[0].cells.length > 2) {
    for (var i=0; i<allRows.length; i++) {
            allRows[i].deleteCell(-1);
        }
    shuffle();
    }  
}
function deleteRow(){ 
    if(myTable.rows.length>2){
    myTable.deleteRow(0);
    shuffle();   
}
}

function shuffledArray( from,  to) {
for(i=from; i<to;i++){
    nums[i-from]=i;
}
for (var i = nums.length; i; i--) {
    j= Math.floor(Math.random() *i);

    [nums[i - 1], nums[j]] = [nums[j], nums[i - 1]];
}
}
</script>
</body>
</html>
&#13;
&#13;
&#13;