我有一个名为'team'的对象,每个团队名称都有一组嵌套对象。在那个团队名称中我有玩家,我希望动态地对每个数组进行排序,而不是为每个团队进行排序.xxxx.player.sort();
var team = {
fnatic: {
team: "Fnatic",
player: ["Olofmeister", "JW", "Pronax", "Krimz", "Flusha"]
},
titan: {
team: "Titan",
player: ["Ex6Tenz", "shox", "RpK", "SmithZz", "Maniac"]
},
nip: {
team: "Ninjas in Pyjamas",
player: ["GeT_RiGhT", "f0rest", "allu", "friberg", "XizT"]
},
nv: {
team: "EnVy Us",
player: ["kennyS", "apeX", "NBK-", "Happy", "kioShiMa"]
},
vp: {
team: "Virtus Pro",
player: ["PashaBiceps", "Taz", "byali", "Snax", "Xx"]
}
};
我正在尝试按字母顺序对播放器数组进行排序(team.XXXX.player)。我发现我可以通过输入
来做到这一点team.fnatic.player.sort();
对于每个团队,但我想迭代对象,因为我将有大量的团队与玩家进行排序。
感谢Arne Martin Aurlien on his blog and his object sort function这与我在搜索和阅读的内容一样接近:
for (var obj in team) {
if (team.hasOwnProperty(obj)) {
console.log(obj, team[obj].player); //line 107
[obj].player = sortObj(team[obj].player);
console.log(obj, team[obj].player); //line 109
}
}
遗憾的是,这仍然只打印出未排序的数组:
fnatic ["Olofmeister", "JW", "Pronax", "Krimz", "Flusha"] script.js:107
fnatic ["Olofmeister", "JW", "Pronax", "Krimz", "Flusha"] script.js:109
titan ["Ex6Tenz", "shox", "RpK", "SmithZz", "Maniac"] script.js:107
titan ["Ex6Tenz", "shox", "RpK", "SmithZz", "Maniac"] script.js:109
...etc for each team
我觉得我在这里缺少一些简单的东西。谁能帮助我?
答案 0 :(得分:1)
在团队密钥上使用Array.prototype.forEach
:
Object.keys(team).forEach(function(key) {
team[key].player.sort();
});
排序已到位(mdn):
sort()方法对数组中的元素进行排序并返回 数组。排序不一定稳定。默认排序顺序 是根据字符串Unicode代码点。
答案 1 :(得分:1)
我认为你在写这个功能时误解了Arne Martin Aurlien在做什么。
他想要一种方法来排序对象属性,而不是对象内的数组。他试图做的事情在设计上失败了,因为ECMAScript规范说对象属性没有被索引。
正如你在他的帖子中所看到的,他说:
小心使用Chrome。如果您的对象同时包含数字和字符串,则Chrome会先使用数字键对对象进行排序,即使按值排序也是如此。
这并不是一个错误,因为规范明确说明了他试图做的事情,它无法完成。
回到你的问题,你想要做的是:在对象内对数组进行排序。
所以,你已经快到了。你的代码应该是这样的:
for (var obj in team) {
if (team.hasOwnProperty(obj)) {
console.log(obj, team[obj].player);
team[obj].player.sort(); // you only need to call the sort method here
console.log(obj, team[obj].player);
}
}
如果我是对的,那么在尝试了解正在发生的事情时你得到的是,你可以通过直接调用它来获取Javascript中对象的属性(例如{{1通过字符串调用它(例如team.fnatic.player
),以及为什么你可以遍历对象并获取所有子对象,以获得team['fnatic'].player
属性(是一个数组),然后对该数组进行排序。