多条件排序
Sorting with multiple conditions
我有一个像这样的对象数组:
[
{
required: false,
sort: 1
},
{
required: true,
sort: 2
},
{
required: false,
sort: 3
},
]
我想按要求的 DESC 排序,ASC 排序。你是怎么做到的?
我要找的结果是:
[
{
required: true,
sort: 2
},
{
required: false,
sort: 1
},
{
required: false,
sort: 3
},
]
目前正在尝试使用此方法,但不起作用。它正确地将必需项放在第一位,但随后忽略了对必需项的排序:
arr.sort((a, b) => {
if (a.required) return -1
return a.sort - b.sort
})
比较时可以用第一个(1)减去第二个(2)。如果它们是相同的值,您可以 logical-OR 对左 (1) 和右 (2) 值进行排序。
const data = [
{ required: false , sort: 1 },
{ required: true , sort: 2 },
{ required: false , sort: 3 },
];
const sorted = data.sort((
{ required: r1, sort: s1 },
{ required: r2, sort: s2 }
) => r2 - r1 || s1 - s2);
console.log(sorted);
.as-console-wrapper { top: 0; max-height: 100% !important }
在 JavaScript 中,减去布尔值得到一个对排序有用的整数值。
true - true // 0 (no change)
true - false // +1 (sink to bottom)
false - true // -1 (float to top)
false - false // 0 (no change)
我有一个像这样的对象数组:
[
{
required: false,
sort: 1
},
{
required: true,
sort: 2
},
{
required: false,
sort: 3
},
]
我想按要求的 DESC 排序,ASC 排序。你是怎么做到的?
我要找的结果是:
[
{
required: true,
sort: 2
},
{
required: false,
sort: 1
},
{
required: false,
sort: 3
},
]
目前正在尝试使用此方法,但不起作用。它正确地将必需项放在第一位,但随后忽略了对必需项的排序:
arr.sort((a, b) => {
if (a.required) return -1
return a.sort - b.sort
})
比较时可以用第一个(1)减去第二个(2)。如果它们是相同的值,您可以 logical-OR 对左 (1) 和右 (2) 值进行排序。
const data = [
{ required: false , sort: 1 },
{ required: true , sort: 2 },
{ required: false , sort: 3 },
];
const sorted = data.sort((
{ required: r1, sort: s1 },
{ required: r2, sort: s2 }
) => r2 - r1 || s1 - s2);
console.log(sorted);
.as-console-wrapper { top: 0; max-height: 100% !important }
在 JavaScript 中,减去布尔值得到一个对排序有用的整数值。
true - true // 0 (no change)
true - false // +1 (sink to bottom)
false - true // -1 (float to top)
false - false // 0 (no change)