Tengo un objeto JS como este
{ "100": {.. data }, "200": {.. data }, "500": {.. data }, "1000": {.. data } /* so on */ }Cómo buscar clave con cualquier número como
aquí está mi código
function find(num, obj) { let keys = Object.keys(obj); result = keys.concat(Number.MAX_SAFE_INTEGER).filter(key => { return num <= key; }).shift(); if(result === Number.MAX_SAFE_INTEGER) { result = keys.pop(); } return result; } console.log( find(125, data) )está devolviendo 200 en lugar de 100
Un enfoque simple aquí es ordenar las claves en orden descendente, luego encontrar la primera clave que tenga un objetivo más grande que ella.
function findNearestMinObj(obj, target) { const sortedKeys = Object.keys(obj).map(d => Number(d)).sort((a, b) => b - a) const key = sortedKeys.find(k => target >= k) if (key === undefined) return false return { key, value: obj[key] } } const data = { 100: "one hundred", 200: "two hundred", 300: "three hundred", 400: "four hundred", 500: "five hundred", 1000: "one thousand", } console.log(`123: ${JSON.stringify(findNearestMinObj(data, 123))}`) console.log(`456: ${JSON.stringify(findNearestMinObj(data, 456))}`) console.log(`1234: ${JSON.stringify(findNearestMinObj(data, 1234))}`) console.log(`99: ${JSON.stringify(findNearestMinObj(data, 99))}`) console.log(`0: ${JSON.stringify(findNearestMinObj(data, 0))}`)