#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
},
];
Мои условия сортировки
- Закрепленные элементы, имеющие значение, ОТЛИЧНОЕ от null, должны быть сверху, и они должны быть отсортированы в порядке убывания по значению.
- Все остальные элементы должны быть ниже закрепленных элементов и должны быть отсортированы в порядке убывания по значению.
После применения сортировки результат будет
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; }