Datos:
array1 = [{"location": "The Green Lion", "postcode": "E1 6QE"}, {"location": "Diners Inn", "postcode": "E6 5FD"}] array2 = [{"location": "Green Lion", "postcode": "E1 6QE"}, {"location": "Diner's Inn", "postcode": "E6 5FD"}] array3 = [{"location": "The Green Lion", "postcode": "E1 6QE"}, {"location": "Diner Inn", "postcode": "E6 5FD"}] //array1 size - 350 | array2 size - 544 | array3 size - 88 Estoy usando una función de comparación aproximada para encontrar elementos similares en una matriz. El problema al que me enfrento es que mi forma actual de lograr esto implica combinar las 3 matrices en 1 y hacer un bucle dos veces y luego comparar la location de forma difusa.
combined.forEach(function (x) { combined.forEach(function (y) { if (fuzz.token_sort_ratio(x.location, y.location) > 80) { //Logic } }); }); ¿Existe una forma más eficiente de lograr esto en lugar de un bucle for anidado? El tamaño de la matriz combinada es 958, lo que significa que se están ejecutando 917 764 iteraciones, esta no parece una forma eficiente de lograrlo, pero debido a que no siempre se garantiza que el valor de la location sea el mismo, no puedo usar el .find() Función .find() (¿o puedo?).
Recomendaría crear un mapa de las ubicaciones y almacenar los resultados en el quadtree. Quadtree es compatible con JavaScript; consulte
https://github.com/timohausmann/quadtree-js
He usado con éxito quadtree en mi práctica (implementado en C++). Para grandes conjuntos de datos, parecía ser al menos 10 veces más rápido que el algoritmo cuadrático.