J'ai un array1 à partir de cases à cocher sélectionnées, et je dois comparer avec le plus similaire, comment faire ?

var array1 = ["pain", "fever", "vomit"]


var array2 = ["diarrhea", "fever", "vomit", "embolism", "bleeding"]
var array3 = ["diarrhea", "tumor", "vomit", "cold", "bleeding"]

J'ai essayé certaines méthodes mais elles ne me renvoient que "vrai" ou "faux", j'aimerais obtenir le tableau le plus similaire1

-1
Camile 14 mars 2019 à 15:37

2 réponses

Meilleure réponse

Vous pouvez compter le nombre d'éléments similaires en utilisant reduce , puis classez vos tableaux par similarité et prenez le premier élément :

const array1 = ["pain", "fever", "vomit"];

const array2 = ["diarrhea", "fever", "vomit", "embolism", "bleeding"];
const array3 = ["diarrhea", "tumor", "vomit", "cold", "bleeding"];

const countSimilarElements = (arr1, arr2) => arr1.reduce((count, x) => count + arr2.includes(x), 0);

const orderBySimilarity = (arr1, ...arr) =>
  arr.map(x => ({ array: x, similarity: countSimilarElements(arr1, x) }))
     .sort((a, b) => b.similarity - a.similarity);

const ordered = orderBySimilarity(array1, array2, array3);
console.log(ordered);
console.log(ordered[0].array);
0
jo_va 14 mars 2019 à 12:47

Cette fonction prend le tableau que vous souhaitez comparer comme 'base' et une liste d'autres tableaux comme 'arr_list', puis renvoie une similarité tableau montrant à quel point chaque tableau de 'arr_list' était similaire à la 'base'. De cette façon, vous pouvez comparer plusieurs tableaux avec un seul appel et savoir référencer leur similarité en référençant l'index du tableau de similarité renvoyé.

const a = ['11', '22', '33'], b = ['11', '44', '55', '66'], c = ['55', '33', '11', '22'], d = ['11', '66', '44', '22'];

const Similarity = (base, arr_list) => {
    let similarity = new Array(arr_list.length).fill(0);//creates similarity array which defaults to 0
    base.forEach( el => {
        arr_list.forEach( (arr, i) => similarity[i] += arr.includes(el) )
    });
    return similarity;
}
const similarity = Similarity(a, [b,c,d])
console.log(similarity)
0
steff_bdh 14 mars 2019 à 17:21