Сортировка массива пользователей и их XP

Допустим, у меня есть множество пользователей, таких как

const array = [{userid: 1, xp: 36}, {userid: 2, xp: 61}, { userid: 3, xp: 13}......]

Как я могу отсортировать это, что пользователь с наибольшим количеством XP находится в начале массива, а второй идет на второе место в массиве и так далее. Спасибо за ваши ответы. Я знаю о сортировке (a, b), но, похоже, это работает только со строками и числами.

🤔 А знаете ли вы, что...
JavaScript используется для разработки современных одностраничных приложений (SPA), где весь контент загружается асинхронно.


50
3

Ответы:

Решено

Вы можете передать обратный вызов sort, который вычитает значения xp.

const array = [{ userid: 1, xp: 36 }, { userid: 2, xp: 61 }, { userid: 3, xp: 13 }];
const res = array.toSorted((a, b) => b.xp - a.xp);
console.info(res);

Примечание. Если вы используете версию Node.js до 20.x, вам потребуется либо использовать Array.prototype.sort, либо полифилл для Array.prototype.toSorted.

// Quick-and-dirty polyfill
Array.prototype.toSorted = Array.prototype.toSorted ?? function(compareFn) {
  return [...this].sort(compareFn);
};

Вы можете использовать следующий код для своей проблемы:

     const array = [
  { userid: 1, xp: 36 },
  { userid: 2, xp: 61 },
  { userid: 3, xp: 13 },
  
];

// Custom comparison function
function compareByXP(user1, user2) {
  if (user1.xp < user2.xp) {
    return 1; // user2 should come before user1
  } else if (user1.xp > user2.xp) {
    return -1; // user1 should come before user2
  } else {
    return 0; // user1 and user2 are tied, maintain their original order
  }
}

// Sort the array based on XP
array.sort(compareByXP);

console.info(array);

Вы можете указать атрибут объекта xp для сравнения с другим объектом xp с помощью метода массива Javascript Sort() Используйте приведенное ниже для справки:

const array= [{userid: 1, xp: 36}, {userid: 2, xp: 61}, { userid: 3, xp: 13}];
console.info(array.sort((a, b) => b.xp - a.xp));