首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中重置和更新对象值

如何在JavaScript中重置和更新对象值
EN

Stack Overflow用户
提问于 2020-10-09 21:12:11
回答 3查看 70关注 0票数 1

-你好!我有一个目标,我试着根据他们在一年(国内生产总值) GDP中产生的货币数量来分类,同时更新这个名为“排名”的属性,从最高到最低。

代码语言:javascript
复制
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 },
];

输出应该如下所示:

代码语言:javascript
复制
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()方法,如下所示:

代码语言:javascript
复制
const orderer = countryData.sort((a,b) => 
  a.gpd < b.gpd ? 1 : -1);
  console.log(orderer);

而且起作用了!但我不知道如何重置和更新排名,我知道应该使用map()方法或for循环。

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2020-10-09 21:21:40

对数据进行排序之后,循环遍历数组并重新分配级别。

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2020-10-09 22:04:31

也许像这样?

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2020-10-21 20:24:23

这是Y的解决方案。它看起来更干净:

代码语言:javascript
复制
let countryDataUpdate = countryData;
countryDataUpdate.sort((a,b) => a.gpd < b.gpd ? 1 : -1)
.map((value, index) => {
  value.rank = index + 1;
  return value;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64287380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档