我有一个包含地理位置代码结果的数组。我想通过与我搜索的术语最接近的匹配对其进行排序。
实施例。搜索:Pizza
。
Array: Pizza Uno, Pizzeria Uno, Burgers and Pizzeria, Cino Pizzeria.
排序的数组应为:
Pizza Uno,
Pizzeria Uno,
Burgers and Pizzeria,
Cino Pizzeria.
感谢您的帮助。
答案 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。它基本上是使两个字符串相同所需的步骤数。