Für die meisten solcher Operationen verwenden wir die Bibliothek lodash. Ich bin offen für andere Vorschläge, würde aber wahrscheinlich die Funktion selbst schreiben, bevor ich eine neue Bibliothek importiere.Javascript/lodash binäre Suche nach Funktion
lodash hat sortedIndexOf
, die eine binäre Suche in einem sortierten Array durchführt (gibt den Index der Übereinstimmung zurück oder -1, falls nicht gefunden). Es hat auch sortedIndexBy
, die mithilfe einer binären Suche den Index findet, um ein neues Element einzufügen, wo Sie eine Funktion angeben können, um den Sortiervergleich zu verwenden (gibt einen gültigen Index zurück, wenn nicht gefunden)
Ich kann nicht finden Funktion, um eine Suche durchzuführen (Index wird nur zurückgegeben, wenn sie gefunden wurde), indem eine effiziente sortierte Suche verwendet wird, mit der Sie die Sortierwertfunktion angeben können. Es könnte wie folgt aussehen:
_.sortedFindBy(array, value, function(x){x.timestamp})
Ich glaube, ich
var idx = _.sortedIndexBy(array, value, function(x){x.timestamp})
return (array[idx] && array[idx].timestamp === value.timestamp) ? idx : -1
verwenden könnte, aber es scheint nur seltsam für mich nicht die syntaktisch kompakte und intuitive Form eines bereits reichen Feature-Set haben von sortierten Suchfunktionen.
Fehle ich etwas aus den Lodash-Dokumenten? Gibt es eine eingebaute Möglichkeit, dies idiomatisch zu tun? Oder sollte ich mit meiner Extra-Check-Methode gehen?
Ich glaube nicht, dass Sie etwas von der Dokumentation fehlt, und es gibt nicht eine idiomatische Weise, die ich finden konnte, das war effizienter als das, was du geschrieben hast. – DevShep