需要對陣列進行排序,使具有相同 currentUser 的值在頂部,并且這些值按名稱排序,如果沒有名稱,則需要將它們按組排序。
const currentUser = 256;
const settings = [
{
name: null,
userId: 256,
},
{
name: 'Bear',
userId: 256,
},
{
name: 'Anatomy',
userId: 256,
},
{
name: null,
userId: 12,
},
{
name: null,
userId: 23,
},
{
name: 'Anatomy',
userId: 43,
},
];
settings.sort((a, b) => {
const aName = a.name || null;
const bName = b.name || null;
return (
(aName === null) - (bName === null) ||
Number(b.userId === currentUser) - Number(a.userId === currentUser) ||
aName - bName
);
});
console.log(settings);
結果應該是一個陣列:
[
{
name: 'Anatomy',
userId: 256,
},
{
name: 'Bear',
userId: 256,
},
{
name: null,
userId: 256,
},
{
name: 'Anatomy',
userId: 43,
},
{
name: null,
userId: 12,
},
{
name: null,
userId: 23,
},
]
我將不勝感激任何幫助,最好的問候,祝你有美好的一天。
uj5u.com熱心網友回復:
以下是代碼中遵循的順序:
- 給予
userId' 匹配的最高優先級currentUser,如果兩個userId' 匹配currentUser,則按字母順序對它們進行排序name,對于null名稱,將它們放在最后(在該組中)。 - 按降序對其他專案進行
userId排序。 - 對于相同的專案
userId,再次按字母順序對它們進行排序name,對于null名稱,將它們放在最后(在該組中)。
const currentUser = 43;
const settings = [
{ name: null, userId: 256 },
{ name: null, userId: 43 },
{ name: "Abby", userId: 43 },
{ name: "Bear", userId: 256 },
{ name: "John", userId: 256 },
{ name: "Simon", userId: 43 },
{ name: null, userId: 12 },
{ name: null, userId: 23 },
{ name: "Anatomy", userId: 43 },
];
function sortByName(a, b) {
if (Object.is(a, null) && Object.is(b, null)) {
return 0;
} else if (Object.is(a, null)) {
return 1;
} else if (Object.is(b, null)) {
return -1;
} else {
return a.localeCompare(b);
}
}
settings.sort((a, b) => {
// Objects that have same `userId` as `currentUser`
if (a.userId === currentUser && b.userId === currentUser) {
return sortByName(a.name, b.name);
} else if (a.userId === currentUser) {
return -1;
} else if (b.userId === currentUser) {
return 1;
}
// Other objects
if (a.userId > b.userId) {
return -1;
} else if (a.userId < b.userId) {
return 1;
} else {
return sortByName(a.name, b.name);
}
});
console.log(settings);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474646.html
標籤:javascript 数组 排序
上一篇:使用VBA的板載排序功能
