如何按照与 id 数组相同的顺序对对象数组进行排序

Jos*_*ain 0 javascript arrays sorting object

我有一系列像这样的玩家对象:

    var players = [{
        id: "thisIsID1",
        name: "William",
        otherProps
    },
    {
        id: "thisIsID2",
        name: "Shakespeare",
        otherProps
    },
    {
        id: "thisIsID3",
        name: "Lola",
        otherProps
    }]
Run Code Online (Sandbox Code Playgroud)

我已经整理了他们的 ID 数组,如下所示:

var shuffledIDs = ["thisIsID2", "thisIsID3", "thisIsID1"]
Run Code Online (Sandbox Code Playgroud)

如何对playersvar 进行排序,以便对象的顺序与 的相应 ID 的顺序相同shuffledIDs

编辑:不同的名字只是为了让玩家不同

Apl*_*123 5

如果您的数据很短,那么您可以使用以下一行对其进行排序:

players = shuffledIDs.map(id => players.find(v => v.id == id))
Run Code Online (Sandbox Code Playgroud)

本质上,对于 中的每个 id shuffledID,它都会找到具有该 id 的元素players并将其放在正确的位置。但是,这需要 O(n^2) 时间,因此对于较大的数据可能无法很好地扩展。如果您想要更快的方法,您可以维护一个 ID 对象:

var ids = {};
players.forEach(v => ids[v.id] = v);
players = shuffledIDs.map(v => ids[v]);
Run Code Online (Sandbox Code Playgroud)