Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

So sánh chuỗi trong JavaScript và trả về phần trăm độ tương đồng


Cần viết hàm JavaScript so sánh hai chuỗi và trả về phần trăm độ tương đồng - đo lường số ký tự chung của hai chuỗi.

Nếu hoàn toàn giống nhau, đầu ra 100; nếu không có ký tự chung, đầu ra 0.

Ví dụ

const calculateSimilarity = (str1 = '', str2 = '') => { 
    let longer = str1; 
    let shorter = str2; 
    if (str1.length < str2.length) { 
        longer = str2; shorter = str1; 
    } 
    let longerLength = longer.length; 
    if (longerLength == 0) { 
        return 1.0; 
    } 
    return +((longerLength - matchDestructively(longer, shorter)) / parseFloat(longerLength) * 100).toFixed(2); 
}; 
const matchDestructively = (str1 = '', str2 = '') => { 
    str1 = str1.toLowerCase(); 
    str2 = str2.toLowerCase(); 
    let arr = new Array(); 
    for (let i = 0; i <= str1.length; i++) { 
        let lastValue = i; 
        for (let j = 0; j <= str2.length; j++) { 
            if (i == 0){ 
                arr[j] = j; 
            }else if(j > 0){ 
                let newValue = arr[j - 1]; 
                if(str1.charAt(i - 1) != str2.charAt(j - 1)) 
                newValue = Math.min(Math.min(newValue, lastValue), arr[j]) + 1; 
                arr[j - 1] = lastValue; lastValue = newValue; 
            } 
        } 
        if (i > 0) arr[str2.length] = lastValue; 
    } 
    return arr[str2.length]; 
}; 
console.log(calculateSimilarity('Mathematics','Mathamatecs'));

Kết quả

Điều này sẽ tạo ra đầu ra sau:

[ 
    [ 1, 10, 100 ], [ 1, 10, 200 ], 
    [ 1, 10, 300 ], [ 1, 20, 100 ], 
    [ 1, 20, 200 ], [ 1, 20, 300 ], 
    [ 2, 10, 100 ], [ 2, 10, 200 ], 
    [ 2, 10, 300 ], [ 2, 20, 100 ], 
    [ 2, 20, 200 ], [ 2, 20, 300 ] 
]