同时对多个阵列进行排序

时间:2015-07-09 23:20:07

标签: javascript arrays sorting

更新:我似乎只是通过添加

来修复它
document.getElementById('fullName').focus(); 
  NameSalaries.sort();
  } 

在主函数中。我无法相信它确实奏效了。但我认为这是因为我'拉链'主阵列。感谢大家的帮助!

好的,我正在尝试一种新方法。这样,员工每次都会动态添加一个新的表格单元格。然而,我所拥有的问题仍然存在。我需要结果在提交时对自己进行排序。名字和工资。

<!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 array" onclick="addToArray()"> <p>&nbsp;</p> 

<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> 

<script type="text/javascript"> 

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(); 
  } 
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>  

1 个答案:

答案 0 :(得分:1)

您可以使用单个对象加入薪水和名称。例如:

var joe = {
    name: "joe schmoe",
    salary: 1234
};

使用这种技术,您可以将两个数组“压缩”为一个:

var employees = [];
for(var i = 0; i < names.length && i < salaries.length; i++) {
    employees.push({ // push appends to the end of the array
        name: names[i],
        salary: salaries[i]
    });
}

您可以将函数传递给array.sort,用于比较值。因此,如果您想根据员工姓名对employees数组进行排序,可以使用<>比较字符串进行字母顺序排列:

var alphabatizedEmployees = employees.sort(function(employee1, employee2) {
    return employee1.name > employee2.name;
});

除了使用salary密钥而不是name密钥外,您可以基于工资进行排序:

var employeesSalarySorted = employees.sort(function(employee1, employee2) {
    return employee1.salary > employee2.salary;
});

sort返回一个新数组,因此不会对原始employees数组进行排序。

我希望这会有所帮助。