对嵌套在嵌套在另一个对象中的对象中的数组进行排序
Sorting an array nested in an object which is nested in another object
我有一个名为 'team' 的对象,每个团队名称都有一组嵌套对象。在那个团队名称中,我有球员,我希望动态地对每个数组进行排序,而不是为每个数组排序 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
我觉得我在这里遗漏了一些简单的东西。谁能帮帮我?
在团队键上使用 Array.prototype.forEach
:
Object.keys(team).forEach(function(key) {
team[key].player.sort();
});
排序到位(mdn):
The sort() method sorts the elements of an array in place and returns
the array. The sort is not necessarily stable. The default sort order
is according to string Unicode code points.
我认为您误解了 Arne Martin Aurlien 在编写该函数时所做的事情。
他想要一种对对象属性进行排序的方法,而不是对象内部的数组。他试图做的事情在设计上失败了,因为 ECMAScript 规范说对象属性没有索引。
正如你在他的 post 中看到的那样,他说:
Be careful using this with Chrome. If your object has both numbers and strings as keys, Chrome will sort the object with the number-keys first, even when sorting by value.
这不是错误,因为规范清楚地说明了他试图做的事情,但无法完成。
回到你的问题,你要做的是:对对象内的数组进行排序。
所以,你已经差不多了。你的代码应该是这样的:
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 中对象的 属性直接(例如 team.fnatic.player
),并通过字符串调用它(例如 team['fnatic'].player
),这就是为什么您可以遍历对象并获取所有子对象,以获得 players
属性(这是一个数组),然后对该数组进行排序。
我有一个名为 'team' 的对象,每个团队名称都有一组嵌套对象。在那个团队名称中,我有球员,我希望动态地对每个数组进行排序,而不是为每个数组排序 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
我觉得我在这里遗漏了一些简单的东西。谁能帮帮我?
在团队键上使用 Array.prototype.forEach
:
Object.keys(team).forEach(function(key) {
team[key].player.sort();
});
排序到位(mdn):
The sort() method sorts the elements of an array in place and returns the array. The sort is not necessarily stable. The default sort order is according to string Unicode code points.
我认为您误解了 Arne Martin Aurlien 在编写该函数时所做的事情。
他想要一种对对象属性进行排序的方法,而不是对象内部的数组。他试图做的事情在设计上失败了,因为 ECMAScript 规范说对象属性没有索引。
正如你在他的 post 中看到的那样,他说:
Be careful using this with Chrome. If your object has both numbers and strings as keys, Chrome will sort the object with the number-keys first, even when sorting by value.
这不是错误,因为规范清楚地说明了他试图做的事情,但无法完成。
回到你的问题,你要做的是:对对象内的数组进行排序。
所以,你已经差不多了。你的代码应该是这样的:
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 中对象的 属性直接(例如 team.fnatic.player
),并通过字符串调用它(例如 team['fnatic'].player
),这就是为什么您可以遍历对象并获取所有子对象,以获得 players
属性(这是一个数组),然后对该数组进行排序。