我的对象数组如下。

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
},
];
我的排序条件是
  • pinnedBy值不为null的项目应位于顶部,并应按值降序排列。
  • 所有其他项目应在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
    }
    ];
    
    我该如何实现?

    最佳答案

    您可以按 bool(boolean) 值的差值排序,然后按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);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    08-18 09:42