Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数组排序问题_Javascript_Sorting - Fatal编程技术网

Javascript数组排序问题

Javascript数组排序问题,javascript,sorting,Javascript,Sorting,我有一个程序,基本上允许观众输入员工姓名和工资,然后点击确认按钮。点击此按钮后,将在下表中为工资和员工姓名添加一个表行和单元格。现在,结果也按字母顺序排序。但是,问题是,直到createbody函数显示之后,结果才会排序。因此,在输入新员工之前,字母顺序不会更新。我的目标是让结果实时排序,或者有一个单独的按钮对结果进行排序。两种方式都可以。代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta

我有一个程序,基本上允许观众输入员工姓名和工资,然后点击确认按钮。点击此按钮后,将在下表中为工资和员工姓名添加一个表行和单元格。现在,结果也按字母顺序排序。但是,问题是,直到createbody函数显示之后,结果才会排序。因此,在输入新员工之前,字母顺序不会更新。我的目标是让结果实时排序,或者有一个单独的按钮对结果进行排序。两种方式都可以。代码如下:

    <!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8" /> 
<title> Table Entry </title> 
</head> 
<body> 
<input type="text" id="fullName" value="" placeholder="Firstname"> :Enter employee name <br> 
<input type="text" id="salary" value="" placeholder="Salary"> :Enter employee salary <br> 
<input type="button" value="click me add to employee list" onclick="addToArray()"> <p>&nbsp;</p> 
<input type="button" value="click me to sort employees" onclick="sortEm()"> <p>&nbsp;</p> 
<div id="tablediv">
<table border="1" id="source" cellspacing="3" cellpadding="3"> 
 <thead> 
  <tr> <th>Employee Name</th> <th>Employee Salary</th> </tr> 
 </thead> 
 <tbody id="sourceBody"> 
  <tr><td>&nbsp;</td><td>&nbsp;</td></tr> 
 </tbody> 
</table> </div>

<script type="text/javascript"> 

function sortEm() {
var tbl = document.getElementById('source');
var row = tbl.insertRow(1);
var cell1 = row.insertCell(0);
row.deleteCell(0);
document.getElementById("tbl").deleteRow(1);


}
var NameSalaries= []; 
function addToArray() { 
  var fn = document.getElementById('fullName').value; 
  var sly = document.getElementById('salary').value; 
  var both = [fn,sly]; 
  NameSalaries.push(both); 
  createBody(NameSalaries); 
  document.getElementById('fullName').focus(); 
  NameSalaries.sort();
  } 

function createBody(NS) { 
  var tarr = []; 
  for (var i=0; i<NS.length; i++) { 
    tarr.push('<tr><td>'+NS[i][0]+'</td><td>'+NS[i][1]+'</td></tr>');  
  } document.getElementById('sourceBody').innerHTML = tarr.join(''); 
} 



</script> 
</body> 
</html>  

表项
:输入员工姓名
:输入员工工资

员工姓名员工工资 函数m(){ var tbl=document.getElementById('source'); 变量行=tbl.insertRow(1); var cell1=行插入单元格(0); 行。删除单元格(0); document.getElementById(“tbl”).deleteRow(1); } var NameSalaries=[]; 函数addToArray(){ var fn=document.getElementById('fullName')。值; var sly=document.getElementById('salary')。值; var两者=[fn,sly]; NameSalaries.push(两个); createBody(NameSalaries); document.getElementById('fullName').focus(); NameSalaries.sort(); } 函数createBody(NS){ var-tarr=[];
对于(var i=0;i我认为说一种方法明显优于另一种方法是不公平的,因为它们都有优缺点

按按钮排序 +更多的用户控制感。界面让人产生这样一种想法,即在您单击通知应用程序执行操作的按钮之前,不会执行任何操作。一些客户端更喜欢这种类型的界面(通常是较旧的客户端)

+没有额外的幕后工作,因此您可以保持应用程序的最大响应能力。在这种情况下,这可能不是什么大问题,但值得一提

-不那么直观。添加更多功能总是会增加复杂性。有时功能值得复杂性,有时不值得复杂性。看看有没有其他方法可以做到这一点,我会说后者

实时排序 +界面是一致的。如果用户指示了特定的订购,而您允许违反该订购,虽然可以接受,但用户仍会注意到,这就像电影中的一个刺耳的情节孔。有时最好不要破坏界面

-意外延迟。如果您需要在用户明确要求执行操作以外的时间更新列表,则可能需要排序,因此会产生微小延迟。此延迟显然会随着列表中项目的增加而增加

-必须在您的列表中再次找到插入的员工。如果您愿意做一些工作并跳转到列表中已添加员工的位置,则从技术上讲,这可以有一个解决方法。如果您使用分页,则这更为相关

-增加了程序的复杂性。与“按按钮排序”不那么直观相反,通常更直观的客户端界面需要更高的复杂性,使其在幕后工作

结论 如果我能提出一个建议,我认为您应该有只在单击时排序的表列标题。行将根据单击的列进行排序,第二次单击只会反转排序(提示:您不需要再次排序)

当您添加新员工时,只需使用当前订单。如果没有其他内容,您的客户就不太可能抱怨您只是维持订单,而不是将员工添加到列表末尾


如果你认为你可能在处理非常大的列表,考虑使用一个WebWork来避免页面上的延迟。如果你使用一个插入排序,你可以在WebWork排序时返回结果,在你的页面上,你只需重新创建行。

为什么你不要求堆栈溢出?谢谢你的提示!根据您提供的信息和一点思考,我认为按按钮排序会更有效。有没有关于如何实现这一点的提示?什么?排序还是排序按钮?只有按钮。对不起。@Suplexx为按钮添加一个onclick属性,该属性调用对列表排序的函数。或者,您可以将onclick添加到t他创建表格标题并根据列类型进行排序。