正如标题所说我试图在对象中找到最接近的整数,我以下列方式存储我的数据,我无法改变它的存储方式。
{"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的值。
答案 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;
答案 1 :(得分:0)
您需要一个变量来存储最接近的匹配。
您可以使用JsonObject来处理json的解析。
将第一个条目加载到变量中。 循环访问其余条目,并针对先前存储的条目检查每个条目。如果它更接近您的搜索数字,请将存储的数据替换为此搜索数据。
与查找列表中的最高或最低值基本相同的问题,除了您使用不同的公式来决定何时用新的值替换以前存储的值。