用户列表-
const users = [
{
name: "user1",
active: true,
limit: 5
},
{
name: "user2",
active: true
},
{
name: "user3",
active: true
},
{
name: "user4",
active: true,
limit: 2
},
{
name: "user5",
active: true,
limit: 0
}
];
此处,limit
值较低的用户必须首先出现(限制的升序),而没有limit
的用户必须按字母顺序排序。但是拥有limit = 0
的用户应属于后一种(字母排序)。
在Node.js中使用lodash库进行排序的代码-
import * as _ from "lodash";
const sortedUsers = _.orderBy(users, ["limit", "name"], ["asc", "asc"]);
使用上述代码输出-
[
{
name: "user5",
active: true,
limit: 0
},
{
name: "user4",
active: true,
limit: 2
},
{
name: "user1",
active: true,
limit: 5
},
{
name: "user2",
active: true
},
{
name: "user3",
active: true
}
]
但是预期输出是-
[
{
name: "user4",
active: true,
limit: 2
},
{
name: "user1",
active: true,
limit: 5
},
{
name: "user2",
active: true
},
{
name: "user3",
active: true
},
{
name: "user5",
active: true,
limit: 0
}
]
答案 0 :(得分:0)
如果将用户限制设置为字符串而不是数字('0'
,'2'
,'5'
),则顺序是相同的。
但是您可以提供函数而不是直接提供名称,因此您可以破解:
const sortedUsers = _.orderBy(
users,
[
(a) => {
return a.limit ? a.limit : undefined;
},
'name'
],
["asc", "asc"]
);
这样,0
最终将被视为(仅出于订购目的)与undefined
相同,后者将0
值的对象放在订单的末尾。
答案 1 :(得分:0)
您可能不需要lodash进行这项简单的工作。如果仍要使用lodash,请在lodash参数中使用相同的sort函数。
const users = [
{
name: "user1",
active: true,
limit: 5
},
{
name: "user2",
active: true
},
{
name: "user3",
active: true
},
{
name: "user4",
active: true,
limit: 2
},
{
name: "user5",
active: true,
limit: 0
}
];
const sortedData = users.sort(({limit = 0}, {limit:yLimit = 0} )=> {
return yLimit - limit
})
console.log(sortedData)