JSFiddle - React, Tailwind, and code Playground

by Timatnet

JavaScript

var a = {a: 2, b: 0.1, c: 0.5, f: 0.5};
var b = {a: 10, b: 10, c: 10, f: 10};

/**
 * Обобщенный коэффициент Jaccard
 */
function intersect(A, B) {
    var intersection = {};
    for(var key in A) {
        if(B[key])
            intersection[key] = Math.min(A[key],B[key])*0.5 + Math.max(A[key],B[key]);
    }
    return intersection;
}

function set_size(A) {
    // var a = Object.keys(A).length;
    var a = 0;
    for(var key in A) a += A[key];
    return a;
}

function jaccard(A, B) {
    var a = set_size(A);
    var b = set_size(B);
    var c = set_size(intersect(A,B));
    alert(JSON.stringify({a:a,b:b,c:c}));
    return c/(a+b-c);
}
/**
 * END Обобщенный коэффициент Jaccard
 */

alert(JSON.stringify(intersect(a,b)));
alert(JSON.stringify(jaccard(a,b)));