可以说我有一个表“employeeTbl_1”如何使用underscore.js在多个键的基础上进行排序?
如果我运行下面的查询
select * from employeeTbl_1
输出
1 Adam 23000
2 Adam 22000
3 Annabel 13500
4 Abraham 13000
5 Alan 12000
6 Svatlana 1500
7 Svatlana 1400
8 Shane 12000
现在,如果我有点用“employeeName”
上表输出如下,
select * from employeeTbl_1 order by employeeName
4 Abraham 13000
1 Adam 23000
2 Adam 22000
5 Alan 12000
3 Annabel 13500
8 Shane 12000
6 Svatlana 1500
7 Svatlana 1400
现在,如果我使用“employeeName”和“工资”两种,输出如下表进行排序,
select * from employeeTbl_1 order by employeeName, salary
4 Abraham 13000
2 Adam 22000
1 Adam 23000
5 Alan 12000
3 Annabel 13500
8 Shane 12000
7 Svatlana 1400
6 Svatlana 1500
你可以在上面看到的(即3个输出)的表进行排序同时在列的基础上,
一样,我需要使用underscore.js库JavaScript来实现,
请按照下面的代码,
var _ = require("underscore");
var employeeList = [ {"id" : 1, "name" : "Adam", "salary" : 23000 },
{"id" : 2, "name" : "Adam", "salary" : 22000 },
{"id" : 3, "name" : "Annabel", "salary" : 13500 },
{"id" : 4, "name" : "Abraham", "salary" : 13000 },
{"id" : 5, "name" : "Alan", "salary" : 12000 },
{"id" : 6, "name" : "Svatlana", "salary" : 1500 },
{"id" : 7, "name" : "Svatlana", "salary" : 1400 },
{"id" : 8, "name" : "Shane", "salary" : 12000 },
];
function sortEmployee(list){
return _.sortBy(_.sortBy(list,"name"),"salary");
}
console.log(sortEmployee(employeeList));
如果我运行上面的代码输出,
[email protected]:~/myPractise/FunctionalJavascriptPractise$ node practise22.js
[ { id: 7, name: 'Svatlana', salary: 1400 },
{ id: 6, name: 'Svatlana', salary: 1500 },
{ id: 5, name: 'Alan', salary: 12000 },
{ id: 8, name: 'Shane', salary: 12000 },
{ id: 4, name: 'Abraham', salary: 13000 },
{ id: 3, name: 'Annabel', salary: 13500 },
{ id: 2, name: 'Adam', salary: 22000 },
{ id: 1, name: 'Adam', salary: 23000 } ]
[email protected]:~/myPractise/FunctionalJavascriptPractise$
从输出可以看到集合有一个条件,即“工资”来分类的。
如何在JavaScript中使用普通的javaScript或使用underscore.js来实现排序?
我尝试使用普通的JavaScript和underScore.js
function sortEmployee(list){
return list.sort(function(employee1,employee2){
return _.isEqual(employee1.name,employee2.name) ?
(_.isEqual(employee1.name,employee2.name) && (employee1.salary < employee2.salary)) : _.isEqual(employee1.name,employee2.name);
});
}
console.log(sortEmployee(employeeList));
输出是
[ { id: 1, name: 'Adam', salary: 23000 },
{ id: 2, name: 'Adam', salary: 22000 },
{ id: 3, name: 'Annabel', salary: 13500 },
{ id: 4, name: 'Abraham', salary: 13000 },
{ id: 5, name: 'Alan', salary: 12000 },
{ id: 6, name: 'Svatlana', salary: 1500 },
{ id: 7, name: 'Svatlana', salary: 1400 },
{ id: 8, name: 'Shane', salary: 12000 } ]
我仍然没有得到所期望的可能输出,这是我在SQL得到分拣
sortBy iteratee不接受两个参数 –
你是绝对正确的。我在想念我。然而,js原生数组排序需要一个比较器和2个参数 – Meir
Thx来指出这一点,我编辑了这个问题,它是否回答你的问题? – Meir