Schlüssel mit dem höchsten Wert vom Objekt abrufen

86

Ich habe ein Objekt wie dieses:

Object {a: 1, b: 2, undefined: 1} 

Wie kann ich schnell die größte Wertkennung (hier :) daraus ziehen b? Ich habe versucht, es in ein Array zu konvertieren und dann zu sortieren, aber es hat nicht funktioniert, da es alphabetisch sortiert wurde (und es scheint ein Overkill zu sein, Daten hin und her zu jonglieren, nur um einen von drei Werten zu erhalten).

Tomek Buszewski
quelle
willst du bekommen 2oder bals Ergebnis
Naeem Shaikh
2
Ich möchte bekommen b;-)
Tomek Buszewski
siehe :: stackoverflow.com/questions/11142884/… .. Bonusantwort :: Sie erhalten auch Min-Wert zusammen mit Max in dieser Antwort .. :)
Sudhir Bastakoti

Antworten:

141

Zum Beispiel:

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce(function(a, b){ return obj[a] > obj[b] ? a : b });

In ES6 :

var obj = {a: 1, b: 2, undefined: 1};

Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);
CD..
quelle
1
Vielen Dank, aber bitte beachten Sie, dass es weitere Artikel geben kann, wie z c, d, e... x.
Tomek Buszewski
8
Dies funktioniert für mehr Elemente. Die Reduktionsfunktion ist eine Iteration durch das gesamte Array;)
Faris Zacina
Tut mir leid, dass ich mir die Mühe gemacht habe, aber wie kann ich auch ein 2Nebenprodukt bekommen b?
Tomek Buszewski
@CD .. wenn ich dies in diesem Fall verwende "var obj = {a: 1, b: 2, c: 2};" es gibt nur c zurück, aber ich brauche b & c, bedeutet alle Schlüssel mit den höchsten Werten
Dinesh
3
@ Dinesh, versuchen Sie:var obj = {a: 1, b: 2, c: 2}, keys = Object.keys(obj), largest = Math.max.apply(null, keys.map(x => obj[x])) result = keys.reduce((result, key) => { if (obj[key] === largest){ result.push(key); } return result; }, []);
CD ..
35

Unterstrich oder Lo-Dash verwenden:

var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });

Mit ES6-Pfeilfunktionen:

var maxKey = _.max(Object.keys(obj), o => obj[o]);

jsFiddle-Demo

Faris Zacina
quelle
15
Ab Lo-Dash 4.0.0 sollte dies nun sein var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });.
Thodic
9

Hier ist ein Vorschlag für den Fall, dass Sie viele gleiche Werte und nicht nur ein Maximum haben:

    const getMax = object => {
        return Object.keys(object).filter(x => {
             return object[x] == Math.max.apply(null, 
             Object.values(object));
       });
    };

Dies gibt ein Array mit den Schlüsseln für alle mit dem Maximalwert zurück, falls es einige gibt, die gleiche Werte haben. Zum Beispiel: wenn

const obj = {Äpfel: 1, Bananen: 1, Birnen: 1}
// Dies gibt ['Äpfel', 'Bananen', 'Birnen'] zurück.

Wenn es andererseits ein Maximum gibt:

const obj = {Äpfel: 1, Bananen: 2, Birnen: 1}; // Dies gibt ['bananas'] zurück
---> Um den String aus dem Array zu entfernen: ['bananas'] [0] // gibt 'bananas'` zurück

Polyccon
quelle
Hallo, wo soll ich das Objekt var genau platzieren? Wenn ich console.log bekomme ich eine "Funktion getMax ()"
Jeff
1
objectIst das Argument, das die obige Funktion annimmt, das obige die ES6-Syntax zum Definieren von Funktionen, äquivalent zu: function getMax(object)Beantwortet das Ihre Frage?
Polyccon
6

Angenommen, Sie haben eine solche Object:

var obj = {a: 1, b: 2, undefined: 1}

Du kannst das

var max = Math.max.apply(null,Object.keys(obj).map(function(x){ return obj[x] }));
console.log(Object.keys(obj).filter(function(x){ return obj[x] == max; })[0]);
Amit Joki
quelle
4

Sehr einfache Methode. ist möglicherweise langsam zu verarbeiten

var v = {a: 1, b: 2, undefined: 1};

function geth(o){
    var vals = [];    
    for(var i in o){
       vals.push(o[i]);
    }

    var max = Math.max.apply(null, vals);

     for(var i in o){
        if(o[i] == max){
            return i;
        }
    }
}

console.log(geth(v));
Astroanu
quelle
0

const data = {
  abc: '',
  myShortKey: '',
  myVeryLongKey: ''
}


const longestKeyLength = Math.max(...Object.keys(data).map((d) => d.length));

console.log(longestKeyLength);

console.log(Object.entries(data).map(([key, val]) => `${key}: ${key.length}`));

Charley Bodkin
quelle