javascript - 根据最接近给定数字的十进制值获取密钥
问题描述
假设我有一个像这样的对象:
var myData = {hex_index: "8d26745060122bf", val_1: 2.003234, val_2: 2.0022008, val_3: 2.0044124, val_4: 2.0045183, val_5: 3.012644, val_6: 1.8760033, val_7: 123.0203457};
给定一个具有给定 int 值的变量,例如:
const valueRI = 2;
如何找到最接近 2 的值,而不是返回该值,而是返回键(例如:'val_2')?我有一个函数可以返回精确匹配的键,它的“最接近的鳍”部分给我带来了麻烦:
const selectRI = () => {
valueRI = document.getElementById("selectInterval").value;
console.log(valueRI);
Object.values(myData).forEach(
function(value) {
if (value === valueRI) {
console.log(Object.keys(masterObj).find(key => masterObj[key] === value));
}
}
);
}
解决方案
按和 值Object.entries(masterObj)
之间的绝对差值排序valueRI
。然后返回第一个键。
var myData = {
hex_index: "8d26745060122bf",
val_1: 2.003234,
val_2: 2.0022008,
val_3: 2.0044124,
val_4: 2.0045183,
val_5: 3.012644,
val_6: 1.8760033,
val_7: 123.0203457
};
const selectRI = (valueRI) => {
const sorted = Object.entries(myData).filter(([k, v]) => k.startsWith('val_')).sort(([k1, v1], [k2, v2]) =>
Math.abs(valueRI - v1) - Math.abs(valueRI - v2));
return sorted[0][0];
}
console.log(selectRI(100));
console.log(selectRI(3.1));
推荐阅读
- amazon-web-services - DynamoDB 模式设计支持按 ID 和时间戳查找项目?
- phpmailer - 服务器 SMTP PHPMailer 的问题
- angular - 使用 jasmine 和量角器运行 e2e 测试时捕获控制台错误
- php - 尽管在本地成功,但在 Circleci 上构建失败
- javascript - Blockstack 应用程序在 npm install ERR 上失败!配置错误
- c++ - 使用 OpenCV 的 CMake 模块目标而不是直接包含所有库?
- .net - 使用 PowerShell 连接到 Azure FTP 但在 C# 中工作时出现错误 501
- parsing - 为什么我们在编译器中同时需要预读符号和预读符号
- android - 片段管理器添加错误的片段
- c# - AQMP ReceiverLink 失去连接