-你好!我有一个目标,我试着根据他们在一年(国内生产总值) GDP中产生的货币数量来分类,同时更新这个名为“排名”的属性,从最高到最低。
const countryData = [
{ rank: 5, name: "Norway", gpd: 77975.4 },
{ rank: 3, name: "Macao", gpd: 81151.9 },
{ rank: 4, name: "Ireland", gpd: 77771.2 },
{ rank: 2, name: "Luxembourg", gpd: 113196.5 },
{ rank: 6, name: "Qatar", gpd: 69687.7 },
{ rank: 1, name: "Switzerland", gpd: 83716.8 },
];输出应该如下所示:
const countryData = [
{ rank: 1, name: "Luxembourg", gpd: 113196.5 },
{ rank: 2, name: "Switzerland", gpd: 83716.8 },
{ rank: 3, name: "Macao", gpd: 81151.9 },
{ rank: 4, name: "Norway", gpd: 77975.4 },
{ rank: 5, name: "Ireland", gpd: 77771.2 },
{ rank: 6, name: "Qatar", gpd: 69687.7 },
]; 我一直在使用sort()方法,如下所示:
const orderer = countryData.sort((a,b) =>
a.gpd < b.gpd ? 1 : -1);
console.log(orderer);而且起作用了!但我不知道如何重置和更新排名,我知道应该使用map()方法或for循环。
提前感谢!
发布于 2020-10-09 21:21:40
对数据进行排序之后,循环遍历数组并重新分配级别。
const countryData = [
{ rank: 5, name: "Norway", gpd: 77975.4 },
{ rank: 3, name: "Macao", gpd: 81151.9 },
{ rank: 4, name: "Ireland", gpd: 77771.2 },
{ rank: 2, name: "Luxembourg", gpd: 113196.5 },
{ rank: 6, name: "Qatar", gpd: 69687.7 },
{ rank: 1, name: "Switzerland", gpd: 83716.8 },
];
const orderer = countryData.sort((a,b) =>
a.gpd < b.gpd ? 1 : -1);
orderer.forEach((o, i) => o.rank = i+1);
console.log(orderer);
发布于 2020-10-09 22:04:31
也许像这样?
const countryData = [
{ rank: 5, name: "Norway", gpd: 77975.4 },
{ rank: 3, name: "Macao", gpd: 81151.9 },
{ rank: 4, name: "Ireland", gpd: 77771.2 },
{ rank: 2, name: "Luxembourg", gpd: 113196.5 },
{ rank: 6, name: "Qatar", gpd: 69687.7 },
{ rank: 1, name: "Switzerland", gpd: 83716.8 }
]
// Name every function to make it testable
// (maybe later, but...):
const by = prop => (a, b) => a[prop] < b[prop] ? 1 : -1
const update = rank => (o, i) => Object.assign({}, o, o[rank] = ++i)
// Now you can do that task in universal,
// testable and readable way:
const ordered = countryData
.sort(by('gpd'))
.map(update('rank'))
console.log(ordered)发布于 2020-10-21 20:24:23
这是Y的解决方案。它看起来更干净:
let countryDataUpdate = countryData;
countryDataUpdate.sort((a,b) => a.gpd < b.gpd ? 1 : -1)
.map((value, index) => {
value.rank = index + 1;
return value;
});https://stackoverflow.com/questions/64287380
复制相似问题