Ermitteln Sie den nächstgelegenen Farbnamen in Abhängigkeit von einer Hex-Farbe
Ich versuche, den passendsten Farbnamen abhängig von einem gegebenen Hex-Wert zu erhalten. Zum Beispiel, wenn wir die Hex-Farbe haben#f00
Wir müssen den Farbnamen bekommenred
.
'#ff0000' => 'red'
'#000000' => 'black'
'#ffff00' => 'yellow'
Ich verwende derzeit den levenshtein-distance-Algorithmus, um den nächstgelegenen Farbnamen zu ermitteln, der bisher gut funktioniert, aber manchmal nicht wie erwartet.
Zum Beispiel:
'#0769ad' => 'chocolate'
'#00aaee' => 'mediumspringgreen'
Also irgendwelche Ideen, wie man das Ergebnis näher bringt?
Hier ist, was ich gemacht habe, um die nächstliegende Farbe zu erhalten:
Array.closest = (function () {
// http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript
function levDist(s, t) {
if (!s.length) return t.length;
if (!t.length) return s.length;
return Math.min(
levDist(s.substring(1), t) + 1,
levDist(t.substring(1), s) + 1,
levDist(s.substring(1), t.substring(1)) + (s[0] !== t[0] ? 1 : 0)
);
}
return function (arr, str) {
// http://stackoverflow.com/q/11919065/1250044#comment16113902_11919065
return arr.sort(function (a, b) {
return levDist(a, str) - levDist(b, str);
});
};
}());
http://jsfiddle.net/ARTsinn/JUZVd/2/
Eine andere Sache ist die Leistung! Es scheint, dass es irgendwo ein wirklich großes Problem gibt, das dies wirklich langsam macht (ist es der Algorithmus?).