【发布时间】:2021-09-14 09:21:18
【问题描述】:
我有一个对象数组,我想根据它们是否包含字符串来排序。
然后我想按时间顺序对匹配字符串的那些进行排序,然后按时间顺序对其余部分进行排序。
这样
const role = waiter
const jobs = [
{
"date": "2021-09-30T00:00:00",
"role": [chef, porter]
},
{
"date": "2021-09-28T00:00:00",
"role": [waiter, chef]
},
{
"date": "2021-09-29T00:00:00",
"role": [waiter, chef]
},
{
"date": "2021-09-01T00:00:00",
"role": [chef]
},
]
应该变成:
[
{
"date": "2021-09-28T00:00:00",
"role": [waiter, chef]
},
{
"date": "2021-09-29T00:00:00",
"role": [waiter, chef]
},
{
"date": "2021-09-01T00:00:00",
"role": [chef]
},
{
"date": "2021-09-30T00:00:00",
"role": [chef, porter]
},
]
到目前为止,我能找到的唯一解决方案是将数组分成两个单独的数组。将它们单独排序,然后将它们合并为一个。
我目前的解决方案:
const arrOne = jobs
.filter((j) => j.role.includes(role))
.sort((a, b) =>
compareDesc(
a.date,b.date
)
);
const arrTwo = jobs
.filter((j) => !j.role.includes(role))
.sort((a, b) =>
compareDesc(
a.date,b.date
)
);
const finalArr = [...arrOne,...arrTwo]
有没有更优雅的解决方案?
最好不需要将数组拆分成单独的数组?
【问题讨论】:
-
@Andreas 用我迄今为止的尝试更新了我的问题
标签: javascript arrays sorting