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?).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage