首页 > 解决方案 > 根据最接近给定数字的十进制值获取密钥

问题描述

假设我有一个像这样的对象:

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

标签: javascriptobjectmath

解决方案


按和 值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));


推荐阅读