1function levenshteinD (s1, s2) { 2 var d = [] 3 var i = 0 4 5 for (i = 0; i <= s1.length; i++) d[i] = [i] 6 for (i = 0; i <= s2.length; i++) d[0][i] = i 7 8 s2.split('').forEach(function (c2, j) { 9 s1.split('').forEach(function (c1, i) { 10 if (c1 === c2) { 11 d[i + 1][j + 1] = d[i][j] 12 return 13 } 14 d[i + 1][j + 1] = Math.min( 15 d[i][j + 1] + 1, 16 d[i + 1][j] + 1, 17 d[i][j] + 1 18 ) 19 }) 20 }) 21 22 return d[s1.length][s2.length] 23} 24 25function meant (scmd, commands) { 26 var d = [] 27 var bestSimilarity = [] 28 29 commands.forEach(function (cmd, i) { 30 var item = {} 31 item[levenshteinD(scmd, cmd)] = i 32 d.push(item) 33 }) 34 35 d.sort(function (a, b) { 36 return Number(Object.keys(a)[0]) - Number(Object.keys(b)[0]) 37 }) 38 39 d.forEach(function (item) { 40 var key = Number(Object.keys(item)[0]) 41 if (scmd.length / 2 >= key) { 42 bestSimilarity.push(commands[item[key]]) 43 } 44 }) 45 46 return bestSimilarity 47} 48 49module.exports = meant 50