使用两种排序条件对javascript中的对象数组进行排序

Vas*_*gar 4 javascript arrays sorting object

我的对象数组如下。

let obj=[
{
  id:1,
  pinnedBy:"abc",
  value:9
},
{
  id:2,
  pinnedBy:null,
  value:10
},
{
  id:3,
  pinnedBy:"abc",
  value:11
},
{
  id:4,
  pinnedBy:null,
  value:12
},
];
Run Code Online (Sandbox Code Playgroud)

我的排序条件是

  1. pinnedBy 值为 NOT null 的项目应位于顶部,并应按值按降序排序。
  2. 所有其他项目应低于 pinnedBy 项目,并应按值降序排序。

应用排序后的结果将是

obj=[
{
  id:3,
  pinnedBy:"abc",
  value:11
},
{
  id:1,
  pinnedBy:"abc",
  value:9
},
{
  id:4,
  pinnedBy:null,
  value:12
},
{
  id:2,
  pinnedBy:null,
  value:10
}
];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Nin*_*olz 6

您可以按 boolena 值的增量排序,然后按value属性排序。

let array = [{ id: 1, pinnedBy: "abc", value: 9}, { id: 2, pinnedBy: null, value: 10 }, { id: 3, pinnedBy: "abc", value: 11 }, { id: 4, pinnedBy: null, value: 12 }];

array.sort((a, b) =>
    (a.pinnedBy === null) - (b.pinnedBy === null) ||
    b.value - a.value
);

console.log(array);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)