javascript - 如何从对象数组中获取关闭对象?
问题描述
我正在尝试从对象数组中获取最近的对象。如果没有匹配的元素,我想从数组中获取最接近的元素?以下是示例:例如,假设数组如下:
const array = [
{ element1: 50, element2: 100, element3: 200, element4: 90 },
{ element1: 150, element2: 110, element3: 200, element4: 190 },
{ element1: 250, element2: 120, element3: 190, element4: 290 },
{ element1: 350, element2: 130, element3: 120, element4: 390 },
{ element1: 450, element2: 140, element3: 140, element4: 490 },
{ element1: 550, element2: 150, element3: 160, element4: 590 },
]
我将设置的值设置如下:{ element1: 60, element2: 100, element3: 200, element4: 100 },
,
然后实际上,数组上没有与此匹配的元素。那时,它会返回离它们最近的一个。在这种情况下,将返回第一个元素 - { element1: 50, element2: 100, element3: 200, element4: 90 }
。
解决方案
您可以使用reduce
然后根据输出对值进行排序:
var array = [ { element1: 50, element2: 100, element3: 200, element4: 90 }, { element1: 150, element2: 110, element3: 200, element4: 190 }, { element1: 250, element2: 120, element3: 190, element4: 290 }, { element1: 350, element2: 130, element3: 120, element4: 390 }, { element1: 450, element2: 140, element3: 140, element4: 490 }, { element1: 550, element2: 150, element3: 160, element4: 590 }];
var settings = { element1: 60, element2: 100, element3: 200, element4: 100 };
var [difference, result] = Object.entries(array.reduce((acc, elem)=>{
difference = 0;
Object.keys(elem).forEach(k=>difference+=Math.abs(elem[k]-settings[k]));
acc[difference] = acc[difference] || [];
acc[difference].push(elem);
return acc;
},{})).sort((a,b)=>a[1]-b[1])[0];
console.log(result);
console.log(difference)
推荐阅读
- php - PHP:致命错误:未捕获的 PDOException:SQLSTATE [HY000]
- node.js - 如何使用 NodeJs 检测连接到我的计算机的 4G 加密狗
- python - 扩展python函数以返回更多值
- r - 将 R 中的符号绘制为权重饼图
- javascript - 赛普拉斯“拒绝框架”问题
- javascript - 为什么在使用 mock-fs 时动态导入会在测试之间意外耦合?
- typescript - 获取动态类扩展的自动完成功能
- sqitch - 有没有办法删除添加到 sqitch 的迁移?
- node.js - 递归查找子对象
- winium - 窗口应用程序挂起时 Winium 停止执行