UNPKG

phpjs

Version:

php.js offers community built php functions in javascript

116 lines (101 loc) 3.13 kB
--- layout: page title: "JavaScript levenshtein function" comments: true sharing: true footer: true alias: - /functions/view/levenshtein:463 - /functions/view/levenshtein - /functions/view/463 - /functions/levenshtein:463 - /functions/463 --- <!-- Generated by Rakefile:build --> A JavaScript equivalent of PHP's levenshtein {% codeblock strings/levenshtein.js lang:js https://raw.github.com/kvz/phpjs/master/functions/strings/levenshtein.js raw on github %} function levenshtein (s1, s2) { // From: http://phpjs.org/functions // + original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com) // + bugfixed by: Onno Marsman // + revised by: Andrea Giammarchi (http://webreflection.blogspot.com) // + reimplemented by: Brett Zamir (http://brett-zamir.me) // + reimplemented by: Alexander M Beedie // * example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld'); // * returns 1: 3 if (s1 == s2) { return 0; } var s1_len = s1.length; var s2_len = s2.length; if (s1_len === 0) { return s2_len; } if (s2_len === 0) { return s1_len; } // BEGIN STATIC var split = false; try { split = !('0')[0]; } catch (e) { split = true; // Earlier IE may not support access by string index } // END STATIC if (split) { s1 = s1.split(''); s2 = s2.split(''); } var v0 = new Array(s1_len + 1); var v1 = new Array(s1_len + 1); var s1_idx = 0, s2_idx = 0, cost = 0; for (s1_idx = 0; s1_idx < s1_len + 1; s1_idx++) { v0[s1_idx] = s1_idx; } var char_s1 = '', char_s2 = ''; for (s2_idx = 1; s2_idx <= s2_len; s2_idx++) { v1[0] = s2_idx; char_s2 = s2[s2_idx - 1]; for (s1_idx = 0; s1_idx < s1_len; s1_idx++) { char_s1 = s1[s1_idx]; cost = (char_s1 == char_s2) ? 0 : 1; var m_min = v0[s1_idx + 1] + 1; var b = v1[s1_idx] + 1; var c = v0[s1_idx] + cost; if (b < m_min) { m_min = b; } if (c < m_min) { m_min = c; } v1[s1_idx + 1] = m_min; } var v_tmp = v0; v0 = v1; v1 = v_tmp; } return v0[s1_len]; } {% endcodeblock %} - [Raw function on GitHub](https://github.com/kvz/phpjs/blob/master/functions/strings/levenshtein.js) Please note that php.js uses JavaScript objects as substitutes for PHP arrays, they are the closest match to this hashtable-like data structure. Please also note that php.js offers community built functions and goes by the [McDonald's Theory](https://medium.com/what-i-learned-building/9216e1c9da7d). We'll put online functions that are far from perfect, in the hopes to spark better contributions. Do you have one? Then please just: - [Edit on GitHub](https://github.com/kvz/phpjs/edit/master/functions/strings/levenshtein.js) ### Example 1 This code {% codeblock lang:js example %} levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld'); {% endcodeblock %} Should return {% codeblock lang:js returns %} 3 {% endcodeblock %} ### Other PHP functions in the strings extension {% render_partial _includes/custom/strings.html %}