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).
javascript
Tomek Buszewski
quelle
quelle
2
oderb
als Ergebnisb
;-)Antworten:
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);
quelle
c, d, e... x
.2
Nebenprodukt bekommenb
?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; }, []);
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
quelle
var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });
.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
Wenn es andererseits ein Maximum gibt:
quelle
object
Ist 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?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]);
quelle
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));
quelle
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}`));
quelle