Есть несколько способов сделать это. У Джея уже есть хороший ответ, но вот еще один, с несколькими указателями:
Мы начнем с ваших данных:
const playersObj = {
'86wjIB7Xbz1tmwlTAAAB': {
rotation: 0.09999999999999964,
x: 579,
y: 579,
playerId: '86wjIB7Xbz1tmwlTAAAB' ,
},
'dWwtnOI8PryXJNDWAAAC': {
rotation: 0.09999999999999964,
x: 488,
y: 579,
playerId: 'dWwtnOI8PryXJNDWAAAC',
},
'GZPYpWdrzj9x0-SsAAAD': {
rotation: -0.09999999999999964,
x: 694,
y: 579,
playerId: 'GZPYpWdrzj9x0-SsAAAD',
},
};
Теперь наша первая цель - превратить этот объект в коллекция объектов - массив, с которым мы можем работать.
Самый простой способ - это получить "ключи" (имена свойств) для объекта:
const playerIds = Object.keys(playersObj); // gives us: ['86wjIB7Xbz1tmwlTAAAB', 'dWwtnOI8PryXJNDWAAAC', 'GZPYpWdrzj9x0-SsAAAD']
Теперь вы можете l oop эти ключи, playerIds и возвращают реальные объекты. Один простой способ:
const players= playerIds.map(playerId => playersObj[playerId]);
Это даст нам те же данные, но в массиве, и мы можем работать с массивом.
Например, давайте отсортируем по x:
players.sort((a, b) => b.x - a.x) // sorts the collection
Мы можем пойти дальше и получить первую запись:
players.sort((a, b) => b.x - a.x)[0];
Наконец, нам нужно только его свойство playerId
:
const leader = players.sort((a, b) => b.x - a.x)[0].playerId; // gives this: 'GZPYpWdrzj9x0-SsAAAD'
Все это как исполняемый фрагмент:
const playersObj = {
'86wjIB7Xbz1tmwlTAAAB': {
rotation: 0.09999999999999964,
x: 579,
y: 579,
playerId: '86wjIB7Xbz1tmwlTAAAB',
},
'dWwtnOI8PryXJNDWAAAC': {
rotation: 0.09999999999999964,
x: 488,
y: 579,
playerId: 'dWwtnOI8PryXJNDWAAAC',
},
'GZPYpWdrzj9x0-SsAAAD': {
rotation: -0.09999999999999964,
x: 694,
y: 579,
playerId: 'GZPYpWdrzj9x0-SsAAAD',
},
};
// get the player keys
const playerIds = Object.keys(playersObj);
// turn players into a collection
const players = playerIds.map(playerId => playersObj[playerId]);
const leaderId = players.sort((a, b) => b.x - a.x)[0].playerId;
console.log(`Leader: ${leaderId}`);
В качестве альтернативы, как предлагает Феликс, вы можете пропустить первые несколько шагов. У вас уже есть playerId для каждого объекта, а не только для ключей (как я изначально думал), поэтому вы пропускаете цепочку keys (). Map (), например:
const playersObj = {
'86wjIB7Xbz1tmwlTAAAB': {
rotation: 0.09999999999999964,
x: 579,
y: 579,
playerId: '86wjIB7Xbz1tmwlTAAAB',
},
'dWwtnOI8PryXJNDWAAAC': {
rotation: 0.09999999999999964,
x: 488,
y: 579,
playerId: 'dWwtnOI8PryXJNDWAAAC',
},
'GZPYpWdrzj9x0-SsAAAD': {
rotation: -0.09999999999999964,
x: 694,
y: 579,
playerId: 'GZPYpWdrzj9x0-SsAAAD',
},
};
// turn players into a collection
const players = Object.values(playersObj);
const leaderId = players.sort((a, b) => b.x - a.x)[0].playerId;
console.log(`Leader: ${leaderId}`);