排序具有多个标准的对象数组



这是我的数组:

let a = [
{
IsGroup: true,
Name: "Antonia Doyle"
},
{
IsGroup: false,
Name: "Dana Gray"
},
{
IsGroup: false,
Name: "Amber Banks"
},
{
IsGroup: false,
Name: "Geoff Neal"
},
{
IsGroup: true,
Name: "Nina Hartley"
},
{
IsGroup: false,
Name: "Elizabeth Warren"
},
{
IsGroup: false,
Name: "Ghengis Khan"
},
{
IsGroup: true,
Name: "Masta Razz"
}
];

我看不出要按IsGroup然后按Name排序。然而,它似乎不起作用。到目前为止我的代码:

let b = [];
b = a;
b.sort(byGroupThenName);
function byGroupThenName(a, b) {
return b.IsGroup - a.IsGroup || (a.Name - b.Name ? -1 : 1);
}

使用dynamicSort()函数,该函数接受两个参数propertyorder(asc&desc(

let a = [ { IsGroup: true , Name: "Antonia Doyle" },
{ IsGroup: false, Name: "Dana Gray" },
{ IsGroup: false, Name: "Amber Banks" },
{ IsGroup: false, Name: "Geoff Neal" },
{ IsGroup: true , Name: "Nina Hartley" },
{ IsGroup: false, Name: "Elizabeth Warren" },
{ IsGroup: false, Name: "Ghengis Khan" },
{ IsGroup: true , Name: "Masta Razz" } ]
const dynamicSort = (property, order) => {
let sortOrder = 1
if (order === 'desc') {
sortOrder = -1
}
return function(a, b) {
// a should come before b in the sorted order
if (a[property] < b[property]) {
return -1 * sortOrder
// a should come after b in the sorted order
} else if (a[property] > b[property]) {
return 1 * sortOrder
// a and b are the same
} else {
return 0 * sortOrder
}
}
}
const sortedArr = a.sort(dynamicSort('IsGroup','desc'))
console.log(sortedArr)

localeCompare可用于比较字符串:

let arr = [ { IsGroup: true , Name: "Antonia Doyle" },
{ IsGroup: false, Name: "Dana Gray" },
{ IsGroup: false, Name: "Amber Banks" },
{ IsGroup: false, Name: "Geoff Neal" },
{ IsGroup: true , Name: "Nina Hartley" },
{ IsGroup: false, Name: "Elizabeth Warren" },
{ IsGroup: false, Name: "Ghengis Khan" },
{ IsGroup: true , Name: "Masta Razz" } ]

arr.sort((a, b) => b.IsGroup - a.IsGroup || a.Name.localeCompare(b.Name))
console.log( JSON.stringify(arr).replace(/},/g, '},n ') )

最新更新