Как я могу отсортировать массив, как показано ниже, если какое-либо из полей отсутствует?
Например, существующий массив:
const users = [
{
id: 1, firstname: 'Jerry'
}, {
id: 2, firstname: 'Thomas', lastname: 'Geib'
}, {
id: 3
}, {
id: 4, lastname: 'Berg'
}, {
id: 5, firstname: 'Ass', lastname: 'Noob'
}, {
id: 6, lastname: 'Jopa'
}
]
и результат должен быть отсортирован в следующем порядке:
firstname и lastnamefirstname или lastnamefirstname и lastnameчтобы это выглядело так:
const users = [
{
id: 2, firstname: 'Thomas', lastname: 'Geib'
}, {
id: 5, firstname: 'Ass', lastname: 'Noob'
}, {
id: 1, firstname: 'Jerry'
}, {
id: 4, lastname: 'Berg'
}, {
id: 6, lastname: 'Jopa'
}, {
id: 3
}
]
Я пробовал эту сортировку, но результат не тот, что мне нужен
users.sort((a,b) => {
if (a.firstname === b.firstname) {
return 0
}
if (!a.firstname) {
return 1
}
return -1
});
фамилия я думаю
Я предполагаю, что наименьшее количество значений полей объекта должно быть последним в массиве
Извините, я правда не то написал. я отредактировал вопрос
Вы не проверяете фактические значения
@hofshteyn ваше редактирование до сих пор не проясняет, что должно произойти, если у 2 пользователей есть и firstname, и lastname?
У меня вопрос: каков ожидаемый порядок после сортировки?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете отсортировать по чеку, если свойство существует. В конце отсортируйте по id по возрастанию.
const users = [{ id: 1, firstname: 'Jerry' }, { id: 2, firstname: 'Thomas', lastname: 'Geib' }, { id: 3 }, { id: 4, lastname: 'Berg' }, { id: 5, firstname: 'Ass', lastname: 'Noob' }, { id: 6, lastname: 'Jopa' }];
users.sort((a, b) =>
('firstname' in b && 'lastname' in b ) - ('firstname' in a && 'lastname' in a) ||
('firstname' in b) - ('firstname' in a) ||
('lastname' in b) - ('lastname' in a) ||
a.id - b.id
);
console.info(users);.as-console-wrapper { max-height: 100% !important; top: 0; }Что ж, просто подсчитайте количество свойств, которыми обладает каждый элемент, и отсортируйте по этому числу в порядке убывания:
var users = [
{id: 1,firstname: 'Jerry'},
{id: 2,firstname: 'Thomas', lastname: 'Geib'},
{id: 3},
{id: 4,lastname: 'Berg'},
{id: 5,firstname: 'Ass',lastname: 'Noob'},
{id: 6,lastname: 'Jopa'}
];
users.sort(function(a, b) {
var aw = ('firstname' in a) + ('lastname' in a);
var bw = ('firstname' in b) + ('lastname' in b);
return bw - aw;
});
console.info(users);
на основе чего вы сортируете свой объект?