2016-05-07 8 views
0

Es ist mir gelungen, die höchste Anzahl der Anzahl-Eigenschaften zu identifizieren, aber ich möchte das Objekt mit dieser Nummer protokollieren, d. H. Das Objekt mit der höchsten Anzahl Nummer protokollieren. Wie mache ich das?JavaScript - Identifizieren Sie das Objekt mit einer eindeutigen Eigenschaft

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); 

Dank

+0

Ist 'objects' tatsächlich ein Array? Objekte bieten nicht die Funktion 'map'. – rcsole

+0

Leider ja, es soll ein Array von Objekten – mellows

+0

'var Objekte sein = [ \t object1 = {username: 'Zeichen', zählen: 3}, \t object2 = {username: 'dave', zählen: 5} , \t object3 = {Benutzername: 'Lucy', Anzahl: 2}, ]; ' – mellows

Antwort

2

Statt .map(), .reduce() verwenden Sie das gewünschte Ziel zu gelangen.

Hier gebe ich den Schlüssel des Ergebnisobjekts zurück. Sie können das Objekt direkt zurückgeben, wenn Sie möchten.

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>


Wenn objects gemeint war ein Array sein, haben Sie immer .reduce() verwenden können, nur ohne Object.keys(). Dies gibt die Objekte direkt zurück, auf die in der ersten Lösung angespielt wurde.

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>

+0

Brilliant danke. Eine weitere Sache, wie logge ich nur den Benutzernamen der höchsten Anzahl, d. H., Es protokolliert nur 'Dave' – mellows

+0

@Mellows: Verwenden Sie die typische Eigenschaft Zugriff '.Benutzername'. Also für die erste Lösung: 'objects [res] .username', und für die zweite' res.username'. –

1

könnten Sie .reduce statt .map verwenden.

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

Sie können zunächst max Grafen finden und dann mit diesem Zählobjekt finden

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)

Verwandte Themen