我有以下物件
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)
有任何想法嗎?
注意:在有效物件中,只有大約 3 到 10 個物件。
uj5u.com熱心網友回復:
您可以通過對兩個物件的width和height屬性的正差異求和來確定兩個物件的“相似度”(我們將其稱為“分數”)。
考慮到這一點,我們可以通過獲取與 相關的得分最低的物件來找到最相似的物件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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310804.html
