JavaScript算法-获取数组中面积最相似的对象

JavaScript Algorithm - Get the object with most similar area in array

我有以下对象

const originalObject = {
   width: 1090,
   height: 723,
}

以及这个对象列表

const validObjects = [
   { 
       width: 1080,
       height: 1080
   }, 
   {
       width: 1080,
       height: 1350 
   },
   {
       width: 1080,
       height: 750
   }
]

赠送以下帮手

const area = (width, height) => width * height;

我需要从 validObjects 中找到面积最接近原始物体的物体。

所以如果我这样做:

getMostSimilarObject(originalObject, validObjects)

我得到:

{
   width: 1080,
   height: 750
}

因为 area(1080, 750) 最接近 area(1090, 723)

有什么想法吗?

注意:在validObjects中,只有大约3到10个对象。

您可以通过对两个对象的 widthheight 属性的正差求和来确定两个对象的“相似”程度(我们称之为“得分”)。

考虑到这一点,我们可以通过获取与 originalObject 相关的得分最低的对象来找到最相似的对象。只需循环遍历列表,计算对象和循环遍历的项目的分数,如果分数低于目前记录的最低分数,则替换对象。

循环结束时的对象是最“相似”的对象。

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))