Angenommen, ich habe ein Objekt mit einer Tonne des Schlüssels:Gibt es eine konstante Zeitlösung, um einen zufälligen Schlüssel eines riesigen Objekts zu erhalten?
const myObject = {
"a": 1,
"b": 2,
"c": 3,
...
}
ich eine separate Liste von Schlüsseln gespeichert habe, kann ich leicht einen gelegentliche in konstanter Zeit erhalten:
const keys = Object.keys(myObject);
const rand = keys[(Math.random() * keys.length)|0];
, Darüber hinaus random element from stream ermöglicht es, einen solchen Schlüssel zu erhalten, ohne dass eine zusätzliche Struktur benötigt wird:
function pickRandomProperty(obj) {
var result;
var count = 0;
for (var prop in obj)
if (Math.random() < 1/++count)
result = prop;
return result;
}
Aber eine solche Lösung ist eher linear als konstante Zeit. Angesichts der neuen ES6-Spezifikationen frage ich mich, ob es jetzt einen Weg gibt, einen zufälligen Schlüssel in konstanter Zeit in Funktion von nur myObject
zu bekommen?
Was sind Ihre Zufälligkeitsanforderungen? Ist es genug, um die Eigenschaft zu erfüllen, dass auf lange Sicht jeder Schlüssel mehr oder weniger mit der gleichen Häufigkeit gewählt wurde? –
in ein Array konvertieren? –
@ HonzaRemes ja – MaiaVictor