gpt4 book ai didi

Javascript - 如何根据深度嵌套的数字对嵌套对象中的值进行排序?

转载 作者:行者123 更新时间:2023-12-03 00:32:33 24 4
gpt4 key购买 nike

我有一个包含国家、城市和这些城市中的商店的对象。我想(稍后)显示根据国家/地区城市数量排序的国家/地区,这有效(我的代码),然后我想根据商店数量对城市进行排序(因此商店最多的城市排在第一位)。我已经尝试了很长时间,但无法使其发挥作用,因为无论我尝试或做什么都不起作用。我需要访问“shopNum”属性,然后访问城市并排序,但我所做的一切都不起作用。任何帮助都会非常好。抱歉,如果它看起来可能太基础了,但我尝试了一段时间,研究了等等,但我有点迷失了。

var data = {
Italy: {
cityNum: 2,
Rome: {
shops: ['Shop123', 'shopxyz'],
shopNum: 2
},
Milan: {
shops: ['Shop1', 'shopA', 'shopD'],
shopNum: 3
}
},
USA: {
cityNum: 1,
Chicago: {
shops: ['Shop123', 'shopxyz', 'shopZ'],
shopNum: 3
},
},
}

var sortedCountries = Object.keys(data).sort((a, b) => {
return data[b]["cityNum"] - data[a]["cityNum"];
}) //works fine

var sortedShops = Object.values(data).map(x => {
Object.values(Object.keys(x).map(item => {
if (item !== "cityNum") {
console.log(item)
return item;
}
})).map(x => console.log("item x", x))
})

sortedCities

最佳答案

普通对象不是依赖特定属性顺序的正确结构。如果你想对这些对象进行排序,你应该使用数组。例如,参见this Q&A了解更多相关信息。

所以你的目标数据结构将会不同。同时,您可以取消属性 cityNumshopNum 因为一旦您拥有数组(具有 length 属性),它们就变得多余了.

我会从内到外工作,开始创建包含城市的排序数组,然后最终根据城市的数量对这些子结构进行排序:

var data = {Italy: {cityNum: 2,Rome: {shops: ['Shop123', 'shopxyz'],shopNum: 2},Milan: {shops: ['Shop1', 'shopA', 'shopD'],shopNum: 3}},USA: {cityNum: 1,Chicago: {shops: ['Shop123', 'shopxyz', 'shopZ'],shopNum: 3},},}
var sortedCountries = Object.entries(data)
.map(([country, cities]) => ({
country,
cities: Object.keys(cities)
.filter(prop => prop !== "cityNum")
.sort((a, b) => cities[b].shops.length - cities[a].shops.length)
.map(city => ({
city,
shops: cities[city].shops
}))
}))
.sort((a, b) => b.cities.length - a.cities.length)
console.log(sortedCountries);

关于Javascript - 如何根据深度嵌套的数字对嵌套对象中的值进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53794131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com