UNPKG

maz-ui

Version:

A standalone components library for Vue.Js 3 & Nuxt.Js 3

1 lines 1.3 kB
import{computed,toValue}from"vue";import{normalizeString}from"@maz-ui/utils/helpers/normalizeString";function levenshteinDistance(string1,string2){let length1=string1.length;let length2=string2.length;let matrix=[];for(let index=0;index<=length1;index++)matrix[index]=[index];for(let index=0;index<=length2;index++)matrix[0][index]=index;for(let index=1;index<=length1;index++)for(let index_=1;index_<=length2;index_++){let cost=string1[index-1]===string2[index_-1]?0:1;matrix[index][index_]=Math.min(matrix[index-1][index_]+1,matrix[index][index_-1]+1,matrix[index-1][index_-1]+cost)}return matrix[length1][length2]}function getMatchingScore(string1,string2){let distance=levenshteinDistance(string1,string2);let maxLength=Math.max(string1.length,string2.length);return maxLength===0?1:1-distance/maxLength}function getMatchingResults(string1,string2,threshold=.75){return getMatchingScore(string1,string2)>=threshold}function useStringMatching(string1,string2,threshold=.75){let _string1=computed(()=>normalizeString(toValue(string1)));let _string2=computed(()=>normalizeString(toValue(string2)));let score=computed(()=>getMatchingScore(_string1.value,_string2.value));return{isMatching:computed(()=>getMatchingResults(_string1.value,_string2.value,toValue(threshold))),score}}export{useStringMatching};