Сортировка массива объектов в javascript с двумя условиями сортировки

#javascript #arrays #sorting #object

#javascript #массивы #сортировка #объект

Вопрос:

Мой массив объектов выглядит следующим образом.

 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
},
];
  

Мои условия сортировки

  1. Закрепленные элементы, имеющие значение, ОТЛИЧНОЕ от null, должны быть сверху, и они должны быть отсортированы в порядке убывания по значению.
  2. Все остальные элементы должны быть ниже закрепленных элементов и должны быть отсортированы в порядке убывания по значению.

После применения сортировки результат будет

 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
}
];
  

Как я могу этого добиться?

Ответ №1:

Вы можете сортировать по дельте значения 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);  
 .as-console-wrapper { max-height: 100% !important; top: 0; }