多条件排序

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)