2017-04-14 168 views
0

当点击OK时,我的代码会生成一个二维矩阵。代码将数据存储在多维数组中,但我试图向代码中添加一个排序函数,该代码使用第4个文本框以升序重新排列代码。有关如何做到这一点的任何建议?如何按升序对多维数组输出进行排序?

HTML代码

<div class="rightDiv"> 
<div id = "pastcalcblock"> 
    <h3> PAST CALCULATIONS </h3> 
     <input type = "text" size = "1" id = "text1"/> 
     <input type = "text" size = "1" id = "text2"/> 
     <input type = "text" size = "1" id = "text3"/> 
     <input type = "text" size = "1" id = "text4"/><br> 
     <input type = "button" value = "Ok" id = "operation" onClick = "display()"/> 
     <div id = "resultTab"> 
       SORT<br> 
        <input type = "button" value = "As Entered" id = "enteredBut"> 
        <input type = "button" value = "By Result" id = "resultBut" onClick = "sort()"><br><br> 
        <div id="expressions"> 
        </div>     
      </div> 
     </div> 

JavaScript代码

function display() 
    { 
    var arrayOne =[document.getElementById('text1').value,document.getElementById('text2').value,document.getElementById('text3').value,document.getElementById('text4').value ]; 

     new_array=arrayOne.join(" "); 
    var para = document.createElement("p"); 
    var t = document.createTextNode(new_array); 
    para.appendChild(t) 
    document.getElementById("expressions").appendChild(para); 

    } 



function sort(){ 
      var dispArr = [document.getElementById('text1').value, 
document.getElementById('text2').value, document.getElementById('text3').value,document.getElementById('text4').value]; 
      var myArray = []; 
      for(var i = 0 ; i < 1 ; i ++) { 
       myArray[i] = []; 
       for(var j = 0 ; j < 5 ; j++) 
       { 
        myArray[i][j] = dispArr[j]; 
        console.log(myArray[i][j]); 
        } 
      } 


     } 
+0

什么劲儿行的'myArray'目的:虽然你有一个循环,它仅包含一行。你想要对这一行进行排序? – trincot

+0

好吧,我试图将数组存储在另一个数组中,然后运行for循环来比较这些值。 –

+0

我很困惑如何解决这个问题。但我想让它工作。 –

回答

0

你最好保持在一个内存变量整个矩阵,并添加了这一点。还要考虑到输出排序后,您还必须知道如何返回到原始顺序,以便“输​​入”按钮仍然具有所需的效果。因此,最好有一个从头开始的显示功能,清空输出并以输入或排序的顺序复制所有数据。

这里是你如何能做到这一点:

var matrix = []; // global value with all data 
 

 
function addExpression() { 
 
    var arrayOne = [ 
 
     document.getElementById('text1').value, 
 
     document.getElementById('text2').value, 
 
     document.getElementById('text3').value, 
 
     document.getElementById('text4').value 
 
    ]; 
 
    // add to matrix 
 
    matrix.push(arrayOne); 
 
    display(false); 
 
} 
 

 
function display(byResult) { 
 
    // Determine whether to sort or not: 
 
    var matrix2 = byResult ? sorted(matrix) : matrix; 
 
    // display each row: 
 
    var expressions = document.getElementById("expressions"); 
 
    expressions.innerHTML = ''; // empty completely 
 
    matrix2.forEach(row => { 
 
     var para = document.createElement("p"); 
 
     var t = document.createTextNode(row.join(" ")); 
 
     para.appendChild(t) 
 
     expressions.appendChild(para); 
 
    }); 
 
} 
 

 
function sorted(m){ // Create a copy, and sort that by last column 
 
    return m.slice().sort((a, b) => a[3] - b[3]); 
 
}
<div class="rightDiv"> 
 
    <div id = "pastcalcblock"> 
 
     <h3> PAST CALCULATIONS </h3> 
 
     <input type = "text" size = "1" id = "text1"/> 
 
     <input type = "text" size = "1" id = "text2"/> 
 
     <input type = "text" size = "1" id = "text3"/> 
 
     <input type = "text" size = "1" id = "text4"/><br> 
 
     <input type = "button" value = "Ok" id = "operation" onClick = "addExpression()"/> 
 
     <div id = "resultTab"> 
 
      SORT<br> 
 
      <input type = "button" value = "As Entered" id = "enteredBut" onClick="display(false)"> 
 
      <input type = "button" value = "By Result" id = "resultBut" onClick = "display(true)"><br><br> 
 
      <div id="expressions"> 
 
      </div>   
 
     </div> 
 
    </div> 
 
</div>

+0

任何想法如何在显示第一个文本框后添加符号? –

+0

这真的是一个不同的问题。但之前有人问过。看看[这个Q&A](http://stackoverflow.com/questions/2913236/html-text-input-field-with-currency-symbol)和[这个问答](http://stackoverflow.com/questions/32950987/HTML的文本输入字段与 - 货币符号内式结束它)。如果您在实施时遇到问题,请提出一个新问题。 – trincot