Mam taki obiekt:
Object {a: 1, b: 2, undefined: 1}
Jak mogę szybko wyciągnąć z niego największy identyfikator wartości (tutaj b
:)? Próbowałem przekonwertować go na tablicę, a następnie posortować, ale nie wyszło, ponieważ zostało posortowane alfabetycznie (i wydaje się przesadą żonglowanie danymi w tę iz powrotem po to, aby uzyskać jedną wartość z trzech).
javascript
Tomek Buszewski
źródło
źródło
2
czyb
w rezultacieb
;-)Odpowiedzi:
Na przykład:
var obj = {a: 1, b: 2, undefined: 1}; Object.keys(obj).reduce(function(a, b){ return obj[a] > obj[b] ? a : b });
W ES6 :
var obj = {a: 1, b: 2, undefined: 1}; Object.keys(obj).reduce((a, b) => obj[a] > obj[b] ? a : b);
źródło
c, d, e... x
.2
pozab
?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; }, []);
Używanie podkreślenia lub Lo-Dash:
var maxKey = _.max(Object.keys(obj), function (o) { return obj[o]; });
Z funkcjami strzałek ES6:
var maxKey = _.max(Object.keys(obj), o => obj[o]);
jsFiddle demo
źródło
var maxKey = _.maxBy(_.keys(obj), function (o) { return obj[o]; });
.Oto sugestia na wypadek, gdybyś miał wiele równych wartości, a nie tylko jedną maksymalną:
const getMax = object => { return Object.keys(object).filter(x => { return object[x] == Math.max.apply(null, Object.values(object)); }); };
Zwraca to tablicę z kluczami dla wszystkich z maksymalną wartością, na wypadek, gdyby niektóre miały równe wartości. Na przykład: if
Jeśli z drugiej strony jest maksimum:
źródło
object
jest argumentem, który przyjmuje powyższa funkcja, powyższa jest składnią ES6 do definiowania funkcji, odpowiednikiem:,function getMax(object)
czy to odpowiada na twoje pytanie?Przypuśćmy, że masz coś
Object
takiego:var obj = {a: 1, b: 2, undefined: 1}
Możesz to zrobić
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]);
źródło
Bardzo podstawowa metoda. może być powolny w przetwarzaniu
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));
źródło
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}`));
źródło