2015-07-09 130 views
0

更新:我似乎只需在主函数中添加排序多个阵列同时

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

你需要** zip **然后排序。 – Bergi

+0

@Bergi:我刚才说他应该结合数组项目,然后排序......我从来没有听说过你指的** zip **。我们在谈论同样的事情吗? –

+0

这绝对是我想要做的。我尝试了concat,但它没有奏效。任何帮助?对不起,js –

回答

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功能将被用于比较值。您可以排序基于工资完全相同的方式,除了使用salary关键

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

和:所以,如果你想根据员工姓名的employees数组进行排序,你可以比较使用<>字符串的字母排序而不是name键:

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

sort返回一个新的数组,所以原来employees阵列将不进行排序。

我希望这会有所帮助。

+0

我是否可以将此与用户定义的名称和薪水一起使用,而不是由我来定义?由于名称和薪水在页面加载后动态添加 –

+0

是的,您可以。当用户添加新条目时,您可以将单个对象推送到一个对象数组,而不是将单独的值推送到单独的数组中。它看起来像在你的文章中的代码中做类似的事情,除了你使用的是2d数组,所以如果你想改变它使用对象,你可以将'var both = [fn,sly]'改成' VAR既= {名称:FN,工资:狡猾}'和'” ​​'+ NS [I] [0] +'​​'+ NS [I] [1] +' ''到'' ​​'+ NS [i] .name +'​​'+ NS [i] .salary +''' – SimpleJ