对数组进行排序,使零值位于每个组的底部,其余值按字母顺序排序
Sort the array so that zero values are at the bottom of each group and the remaining values are sorted alphabetically
需要对数组进行排序,使具有相同 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,
},
]
如果有任何帮助,我将不胜感激,祝你有愉快的一天。
代码中的顺序如下:
- 最优先考虑
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);
需要对数组进行排序,使具有相同 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,
},
]
如果有任何帮助,我将不胜感激,祝你有愉快的一天。
代码中的顺序如下:
- 最优先考虑
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);