tengo el siguiente objeto
const originalObject = { width: 1090, height: 723, }Y esta lista de objetos
const validObjects = [ { width: 1080, height: 1080 }, { width: 1080, height: 1350 }, { width: 1080, height: 750 } ]Dando el siguiente ayudante
const area = (width, height) => width * height; Necesito encontrar el objeto de validObjects cuya área se parezca más a la del objeto original.
Entonces si hago:
getMostSimilarObject(originalObject, validObjects)Yo obtengo:
{ width: 1080, height: 750 } ya que area(1080, 750) es la más cercana a area(1090, 723)
¿Algunas ideas?
Nota: En validObjects , solo habrá entre 3 y 10 objetos.
Puede determinar qué tan "similares" son dos objetos (lo llamaremos "puntaje") sumando la diferencia positiva de las propiedades de width y height de los dos objetos.
Con esto en mente, podemos encontrar el objeto más similar obteniendo el objeto con la puntuación más baja en relación con originalObject . Simplemente recorra la lista, calcule la puntuación del objeto y el elemento que se está reproduciendo, y si la puntuación es más baja que la más baja registrada hasta el momento, reemplace el objeto.
El objeto al final del bucle es el objeto más "similar".
const validObjects = [{ width: 1080, height: 1080 }, { width: 1080, height: 1350 }, { width: 1080, height: 750 } ] const originalObject = { width: 1090, height: 723, } function getMostSimilarObject(obj, list) { let score; let closest; list.forEach(e => { let objscore = Math.abs(obj.width - e.width) + Math.abs(obj.height - e.height) if (!score || objscore < score) { score = objscore; closest = e; } }) return closest; } console.log(getMostSimilarObject(originalObject, validObjects))