Мой объект выглядит так:

players: {
  p1: {
    name: joe,
    points: 25
  },
  p2: {
    name: frank,
    points: 35
  },
  p3: {
    name: tim,
    points: 55
  }
}

Как бы вернуть объект игрока с наибольшим значением «очков»? Например:

{ name: tim, points: 55 }
2
Alec Sibilia 13 Дек 2016 в 08:55

3 ответа

Лучший ответ

Используйте JavaScript Array#reduce,

var data = {
  players: {
    p1: {
      name: 'joe',
      points: 25
    },
    p2: {
      name: ' frank',
      points: 35
    },
    p3: {
      name: 'tim',
      points: 55
    }
  }
};

var res = data.players[
  // get all property names
  Object.keys(data.players)
  // get the property name which holds the hghest point
  .reduce(function(a, b) {
    // compare and get the property which holds the highest
    return data.players[a].points < data.players[b].points ? b : a;
  })
];

console.log(res);
2
Pranav C Balan 13 Дек 2016 в 06:00
const data = {p1: {name: 'hello', points: 1}, p2: {name: 'world', points: 2}}
const dataList = _.values(data)
const maxPointItem = dataList.reduce((prev, curr) => prev.points < curr.points ? curr : prev), dataList[0])
0
acrazing 13 Дек 2016 в 06:13

Использовать _.maxBy

_.chain(players)
     .values()
     .maxBy('points')
     .value();
2
stasovlas 13 Дек 2016 в 06:35