如何使用 underscore.js 基于多个键进行排序?
How to sort on basis of multiple keys using underscore.js?
假设我有一个 table "employeeTbl_1"
如果我运行下面的查询
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"
对上述 table 进行排序
输出结果如下,
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" 和 "salary" 对 table 进行排序,输出如下,
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
您可以在上面看到(即第三个输出)table 是根据
列排序的
我需要使用 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));
如果我运行上面的代码输出是,
rahul@rahul:~/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 } ]
rahul@rahul:~/myPractise/FunctionalJavascriptPractise$
从输出中您可以看到集合是根据一个条件排序的,即 "salary"。
如何使用普通 javaScript 或使用 sql.
中的 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 排序
中得到的想要的输出
Underscore 的 sortBy 也接受一个迭代函数,如果你给它传递一个函数,首先检查名字,如果它们相等比较工资,你会得到想要的排序。
comparator(v1, v2){
return ((v1.name - v2.name) || (v1.value - v2.value))
}
如果名称相等,则第二个子句开始并比较值。
阅读您的评论后,这里是更新版本:
function nameSalaryComparator(v1, v2){
return (v1.name === v2.name ?
v1.salary - v2.salary :
(v1.name > v2.name ? 1 : -1));
}
您可以找到有效的 jsbin here。我什至添加了另一个条目以显示它正确排序。
您的代码可能无法正常工作,因为您 return 使用的是布尔值而不是数字。我无法访问 MDN 的站点,但你可以看到一个参考 here。您的函数应该 return 一个代表顺序的数字:
Optional. A function that defines an alternative sort order. The
function should return a negative, zero, or positive value, depending
on the arguments...
假设我有一个 table "employeeTbl_1"
如果我运行下面的查询
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"
对上述 table 进行排序输出结果如下,
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" 和 "salary" 对 table 进行排序,输出如下,
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
您可以在上面看到(即第三个输出)table 是根据
列排序的我需要使用 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));
如果我运行上面的代码输出是,
rahul@rahul:~/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 } ]
rahul@rahul:~/myPractise/FunctionalJavascriptPractise$
从输出中您可以看到集合是根据一个条件排序的,即 "salary"。
如何使用普通 javaScript 或使用 sql.
中的 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 排序
中得到的想要的输出Underscore 的 sortBy 也接受一个迭代函数,如果你给它传递一个函数,首先检查名字,如果它们相等比较工资,你会得到想要的排序。
comparator(v1, v2){
return ((v1.name - v2.name) || (v1.value - v2.value))
}
如果名称相等,则第二个子句开始并比较值。
阅读您的评论后,这里是更新版本:
function nameSalaryComparator(v1, v2){
return (v1.name === v2.name ?
v1.salary - v2.salary :
(v1.name > v2.name ? 1 : -1));
}
您可以找到有效的 jsbin here。我什至添加了另一个条目以显示它正确排序。
您的代码可能无法正常工作,因为您 return 使用的是布尔值而不是数字。我无法访问 MDN 的站点,但你可以看到一个参考 here。您的函数应该 return 一个代表顺序的数字:
Optional. A function that defines an alternative sort order. The function should return a negative, zero, or positive value, depending on the arguments...