NEWS
[gelöst] key mit größten Wert in Struktur herausfinden
-
Hallo. Kann ich irgendwie herausfinden welcher Wert einer Struktur am größten ist und deren Key zusätzlich?
Mir ist schon klar, dass es auch andere Werte geben kann in einer Struktur, deshalb vielleicht auch eine Sortierung? Der Werte?Also Hintergrund ist, dass ich gerne den Key herausfinden würde, hinter welchem sich der größte Wert versteckt.
Bsp.{a:11,b:23,n:12}
Ich würde gerne b als Lösung erhalten.
-
Habe es gerade selbst heraus gefunden…
const st = {a:1,xy:33,f:4}; const abc = Object.keys(st).sort(); console.log(st); console.log(abc); console.log(abc[abc.length-1]); console.log(st[abc[abc.length-1]]);
-
@ben1983 hier eine Alternative mit jsonata, funktioniert auch mit Blockly. jsonata ist nicht so easy zu erlernen, aber unfassbar cool
const myObj = { a: 1, xy: 33, f: 4, d: 33 }; const expr1 = `$max(*)` const expr2 = `$keys($spread()^(>*)[0])` const expr3 = `$keys($spread()^($keys($)))` const jsonata = async (obj, expr) => await jsonataExpression(obj, expr); async function test() { log(await jsonata(myObj, expr3)); log(await jsonata(myObj, expr2)); log(await jsonata(myObj, expr1)); } test()
-
@fastfoot danke
-
@ben1983
Sort ist Performance mäßig teuer
Besser wäre reduce
Ist zwar auch eine Array Methode
Aber auch mit Obect.keys Befehl erhältst du ja ein Array der keys. Im callback der reduce Funktion kannst du dann die Max Funktion anwenden und erhältst dann exakt einen Wert zurück ohne weitere Array oder Objekt Manipulationen -
@oliverio OK, hast Du ein Beispiel?
-
@ben1983 noch zwei Möglichkeiten. Ich finde jsonata schöner, wenn auch für dieses Beispiel etwas überdimensioniert
const st = { "a": 1, "xy": 33, "f": 4, "d": 32 }; //reduce const props = Object.keys(st); let maxProp = props.reduce((p, a, i) => st[p] >= st[a] ? p : a) let maxVal = props.reduce((p, a, i) => st[p] >= st[a] ? st[p] : st[a]); log(maxProp + ' -> ' + maxVal); //for... in maxVal = 0; maxProp = ''; for (const prop in st) { if (st[prop] > maxVal) { maxVal = st[prop]; maxProp = prop; } } log(maxProp + ' -> ' + maxVal);
-
Beispiel siehe maxVal Beispiel von fastfood