He logrado identificar el número más alto de las propiedades de conteo, sin embargo, quiero registrar el objeto asociado con ese número, es decir, registrar el objeto con el número de conteo más alto. ¿Cómo hago esto?

var objects = {

    object1: {username: 'mark', count: 3},
    object2: {username: 'dave', count: 5},
    object3: {username: 'lucy', count: 2},
};

var maxBap = Math.max.apply(Math,objects.map(function(o){return o.count;}));
console.log(maxBap);

Gracias

0
mellows 7 may. 2016 a las 20:31

3 respuestas

La mejor respuesta

En lugar de .map(), use {{ X1}} para obtener el objetivo deseado.

Aquí estoy devolviendo la clave del objeto de resultado. Puede devolver el objeto directamente si lo desea.

var objects = {
    object1: {username: 'mark', count: 3},
    object2: {username: 'dave', count: 5},
    object3: {username: 'lucy', count: 2},
};

var res = Object.keys(objects).reduce(function(resKey, key) {
  return objects[resKey].count > objects[key].count ? resKey : key
})

document.querySelector("pre").textContent = res + ": " +
  JSON.stringify(objects[res], null, 4);
<pre></pre>

Si objects estaba destinado a ser una matriz, aún puede usar .reduce(), solo sin Object.keys(). Esto devuelve los objetos directamente, que se mencionó en la primera solución.

var objects = [
    {username: 'mark', count: 3},
    {username: 'dave', count: 5},
    {username: 'lucy', count: 2},
];

var res = objects.reduce(function(resObj, obj) {
  return resObj.count > obj.count ? resObj : obj
})

document.querySelector("pre").textContent =
  JSON.stringify(res, null, 4);
<pre></pre>
2
user1106925 7 may. 2016 a las 17:38

Primero puede encontrar max del recuento y luego buscar objetos con ese recuento

var objects = {
    object1: {username: 'mark', count: 3},
    object2: {username: 'dave', count: 5},
    object3: {username: 'lucy', count: 2},
}, result = null;

var max = Math.max.apply(null, Object.keys(objects).map(e => {return objects[e].count}));

for (var obj in objects) {
  if (objects[obj].count == max) result = objects[obj];
}

console.log(result)
1
Nenad Vracar 7 may. 2016 a las 17:47

Puede usar .reduce en lugar de .map.

const objects = [
  { username: 'mark', count: 3 },
  { username: 'dave', count: 5 },
  { username: 'lucy', count: 2 },
]

const max = objects.reduce((acc, obj) => (
  obj.count > acc.count ? obj : acc
))

console.log(max)
1
rcsole 7 may. 2016 a las 17:42