在Object中查找最接近的整数

时间:2017-03-27 21:33:27

标签: javascript loops object

正如标题所说我试图在对象中找到最接近的整数,我以下列方式存储我的数据,我无法改变它的存储方式。

{"response":
    {"success":1,"current_time":1490650140,"items":
        {"AK-47 | Aquamarine Revenge (Battle-Scarred)":{"last_updated":1490648718,"quantity":98,"value":1120},
        "AK-47 | Aquamarine Revenge (Factory New)":{"last_updated":1490648718,"quantity":47,"value":3229},
        "AK-47 | Aquamarine Revenge (Field-Tested)":{"last_updated":1490648718,"quantity":159,"value":1623}
        }
    }
}

我想找到最接近给定数字(x)的项目。如果物品价值相等,它应该选择。我知道我需要一个循环,但我不知道从哪里开始。

我正在尝试在obj中找到最接近整数x的值。

2 个答案:

答案 0 :(得分:1)

您可以在对象上使用for..in,或者使用数组迭代方法for.forEach等,方法是使用Object.keys(data.response.items)(这将为您提供一个数组对象键)。



const data = {"response":
    {"success":1,"current_time":1490650140,"items":
        {"AK-47 | Aquamarine Revenge (Battle-Scarred)":{"last_updated":1490648718,"quantity":98,"value":1120},
        "AK-47 | Aquamarine Revenge (Factory New)":{"last_updated":1490648718,"quantity":47,"value":3229},
        "AK-47 | Aquamarine Revenge (Field-Tested)":{"last_updated":1490648718,"quantity":159,"value":1623}
        }
    }
};
const target = 1344;

function findClosestForIn(items, target) {
    let closestVal = Infinity;
    let closestObj = null;

    for (let key in items) {
        let obj = items[key];
        let curDiff = Math.abs(obj.value - target);

        if (curDiff < closestVal) {
          closestVal = curDiff;
          closestObj = obj;
        }
    }

    return closestObj;
}

function findClosestObjectKeys(items, target) {
    let closestVal = Infinity;
    let closestObj = null;

    Object.keys(data.response.items).forEach((key) => {
        const obj = data.response.items[key];
        const curDiff = Math.abs(obj.value - target);

        if (curDiff < closestVal) {
          closestVal = curDiff;
          closestObj = obj;
        }
    });

    return closestObj;
}


console.log('closest using for..in: ', findClosestForIn(data.response.items, target));
console.log('closest using Object.keys: ', findClosestObjectKeys(data.response.items, target));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您需要一个变量来存储最接近的匹配。

您可以使用JsonObject来处理json的解析。

将第一个条目加载到变量中。 循环访问其余条目,并针对先前存储的条目检查每个条目。如果它更接近您的搜索数字,请将存储的数据替换为此搜索数据。

与查找列表中的最高或最低值基本相同的问题,除了您使用不同的公式来决定何时用新的值替换以前存储的值。