Javascript通过匹配字符串对数组进行排序

时间:2011-12-09 20:35:59

标签: javascript sorting

我有一个包含地理位置代码结果的数组。我想通过与我搜索的术语最接近的匹配对其进行排序。

实施例。搜索:Pizza

Array: Pizza Uno, Pizzeria Uno, Burgers and Pizzeria, Cino Pizzeria. 

排序的数组应为:

Pizza Uno,
Pizzeria Uno,
Burgers and Pizzeria,
Cino Pizzeria. 

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这样的事情怎么样?这是我getting the closest color name, depending on a hex-color的第一个方法。

当然有一个更好的解决方案,你可以看一下sift算法,它比 levenshtein的方法快得多。

然而,这应该符合预期。

Array.closest = (function () {
    function levenshtein(s, t) {
        if (!s.length) return t.length;
        if (!t.length) return s.length;

        return Math.min(
            levenshtein((s.substring(1), t) + 1,
            levenshtein((t.substring(1), s) + 1,
            levenshtein((s.substring(1), t.substring(1)) + (s[0] !== t[0] ? 1 : 0)
        );
    }

    return function (arr, str) {
        return arr.sort(function (a, b) {
            return levenshtein((a, str) - levenshtein((b, str);
        });
    };
}());


var arr = ['Pizza Uno', 'Pizzeria Uno', 'Burgers and Pizzeria', 'Cino Pizzeria.'];
Array.closest(arr, 'Pizza') // => ['Pizza Uno', 'Pizzeria Uno', 'Cino Pizzeria.', 'Burgers and Pizzeria'];

答案 1 :(得分:1)

一个真正基本的算法,就是根据总字符串长度的百分比进行排序,匹配占用。因此,“Pizza”的精确匹配将是5/5(100%),“Pizza Uno”匹配将是5/9,“Pizzeria Uno”是4/12,依此类推。这是最基本的MySQL自然排序算法的核心组件之一。

答案 2 :(得分:0)

您可以尝试计算2个字符串之间的Levenshtein Distance。它基本上是使两个字符串相同所需的步骤数。