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?
编辑:不同的名字只是为了让玩家不同
如果您的数据很短,那么您可以使用以下一行对其进行排序:
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)