Проблема с общей функцией сортировки в javascript - PullRequest
0 голосов
/ 21 марта 2020

У меня есть список пользователей со свойствами, и я хочу вывести лучший список в соответствии с каждым из них. Когда я закомментирую "nrGames": sorter(allUsersWithStats, "nrGames"), он корректно сортируется в соответствии с elo, но если нет, оба сортируются в соответствии с nrGames. Думаю, мне как-то нужно использовать новый экземпляр allUsersWithStats, чтобы предотвратить его, но я не совсем уверен.

async function getRankedUserList() {
    allUsersWithStats = await getAllUsersWithStats();
    topList = {
        "elo": sorter(allUsersWithStats, "elo"),
        "nrGames": sorter(allUsersWithStats, "nrGames"),
    }
    return topList;
}

function sorter(allUsersWithStats, propertyName) {
    return allUsersWithStats.sort(function (a, b) {
        return b[propertyName] - a[propertyName];
    });
} 

Массив allUsersWithStats выглядит следующим образом:

[
  {
    name: 'Bob',
    elo: 962,
    nrGames: 2,
  },
  {
    name: 'John',
    elo: 979,
    nrGames: 3,
  }
]

1 Ответ

2 голосов
/ 21 марта 2020

Javascript sort функция мутирует массив.

Итак, вы должны сначала скопировать массив, а затем отправить его в вашу функцию

async function getRankedUserList() {
    allUsersWithStats = await getAllUsersWithStats();
    topList = {
        "elo": sorter([...allUsersWithStats], "elo"),
        "nrGames": sorter([...allUsersWithStats], "nrGames"),
    }
    return topList;
}

Или

function sorter(allUsersWithStats, propertyName) {
    return [...allUsersWithStats].sort(function (a, b) {
        return b[propertyName] - a[propertyName];
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...