hometify/bak/filterProperties1.js

48 lines
1.5 KiB
JavaScript

// utils/filterProperties.js
import Fuse from 'fuse.js';
export const filterSimilarProperties = (properties) => {
const options = {
keys: ['title'], // Solo buscamos similitud en el título
threshold: 0.6, // 0.6 es un umbral para 40% de similitud
includeScore: true // Incluye la puntuación de similitud
};
const fuse = new Fuse(properties, options);
const uniqueProperties = [];
const seen = new Set(); // Usaremos un conjunto para rastrear propiedades vistas
properties.forEach((property) => {
if (!seen.has(property.id)) {
// Buscamos propiedades similares por título
const result = fuse.search(property.title).filter((res) => {
// Filtramos resultados que no sean la misma propiedad y sean similares en título
return res.item.id !== property.id && res.score < options.threshold;
});
// Comprobamos coincidencia exacta en price, rooms y area
const matchingProperties = result.filter((res) => {
const item = res.item;
return (
item.price === property.price &&
(item.rooms === property.rooms ||
item.area === property.area)
);
});
if (matchingProperties.length === 0) {
uniqueProperties.push(property);
}
// Marcar propiedades similares como vistas
matchingProperties.forEach((res) => {
seen.add(res.item.id);
});
// Añadir la propiedad actual como vista
seen.add(property.id);
}
});
return uniqueProperties;
};