返回对象数组中具有最大值的键的最简单方法是什么?

Bea*_*ean 0 javascript arrays sorting

我正在制作一个简单的RPG,并尝试计算角色升级时应增加哪个属性。它们对每个属性都有潜在的限制,我想增加距离其潜力最远的属性。

我可以遍历每个属性,并从其潜在值中减去其当前值以获得差值。然后,我可以将差异推到数组中。结果看起来像:

[
{Strength: 5},
{Dexterity: 6},
{Constitution: 3},
{Wisdom: 4},
{Charisma: 8}
]
Run Code Online (Sandbox Code Playgroud)

Charisma是差异最大的键,那么如何评估此值并返回键的名称(而不是值本身)?

编辑:这是用于获取数组的逻辑:

let difference = [];
let key;
for (key in currentAttributes) {
  difference.push({[key]: potentialAttributes[key] - currentAttributes[key]});
};
Run Code Online (Sandbox Code Playgroud)

epa*_*llo 5

使用Object.entries轻松简化

const items = [
  { Strength: 5 },
  { Dexterity: 6 },
  { Constitution: 3 },
  { Wisdom: 4 },
  { Charisma: 8 }
]

const biggest = items.reduce((biggest, current, ind) => {
  const parts = Object.entries(current)[0]  //RETURNS [KEY, VALUE]
  return (!ind || parts[1] > biggest[1]) ? parts : biggest  // IF FIRST OR BIGGER
}, null) 
console.log(biggest[0])  // 0 = KEY, 1 = BIGGEST VALUE
Run Code Online (Sandbox Code Playgroud)

您的数据模型对于带有对象的数组有点奇怪,一个更好的模型就是一个对象。

const items = {
  Strength: 5,
  Dexterity: 6,
  Constitution: 3,
  Wisdom: 4,
  Charisma: 8
}

const biggest = Object.entries(items)
  .reduce((biggest, current, ind) => {
    const parts = current
    return (!ind || parts[1] > biggest[1]) ? parts : biggest  
}, null) 

console.log(biggest[0])
Run Code Online (Sandbox Code Playgroud)