Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
Obtenga la clave de objeto más cercana del objeto que contiene varios objetos con claves numéricas

Tengo un objeto que contiene un número indefinido de objetos secundarios que están asociados por valores numéricos como claves de objeto. Lo que necesito es una forma de pasar un número numérico (moneda) y obtener el objeto secundario más cercano al número que paso a la función.

Ejemplo de estructura de objeto

 { "32.5": [ { "key": "value", "key": "value" }, { "key": "value", "key": "value" } ], "34": [ { "key": "value", "key": "value" } ], "35.5": [ { "key": "value", "key": "value" } ] }

Las claves del objeto son cadenas, por lo que ya descubrí que probablemente de alguna manera tenga que analizar las claves del objeto en un número para comparar, pero estoy completamente perdido sobre cómo unirlo todo.

Declaré una función que toma 3 parámetros que al final deberían devolver el objeto secundario donde su clave es la más cercana a mi parámetro de entrada.

 function getNearest(obj, decimalNumber, below_or_above)

cuando pongo "arriba" quiero obtener la clave más cercana donde su valor numérico es el siguiente más alto, cuando pongo "abajo" devolverá el siguiente objeto donde su número clave es el siguiente más pequeño.

Si llamara a getNearest(obj, 33.4, arriba) debería devolver el objeto con la clave "34".

Espero haber logrado explicar de alguna manera para que todos puedan entender..

Este es el punto de partida que se me ocurrió, pero no sé cómo proceder desde aquí.

 function getNearest(obj, decimalNumber, above_or_below){ const keys = []; Object.keys(obj).forEach(key =>{ let numericKey = Number(key); keys.push(numericKey); }) //store all numeric keys in array to further process later on }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tú podrías

  • obtener claves del objeto,
  • números de mapa,
  • ordenar matriz para ajustar la clasificación de objetos nativos (primero el entero positivo de 32 bits),
  • encuentre el valor verificando si es menor que el valor o presionando el último elemento o si el delta absoluto del elemento real y el siguiente es menor.
 value below above ------- ------- ------- 0 undef 32.5 31.4 undef 32.5 32.5 32.5 34 32.8 32.5 34 33.4 32.5 34 34 34 34 35.1 34 35.5 35.5 35.5 35.5 50 35.5 undef isAbove false true 

 const getKey = (object, value, isAbove) => Object .keys(object) .map(Number) .sort((a, b) => a - b) .find((v, i, a) => isAbove ? v >= value : v <= value && (a[i + 1] > value || i + 1 === a.length) ), data = { 32.5: [{}], 34: [{}], 35.5: [{}] }; console.log('below'); console.log(getKey(data, 0)); // 32.3 console.log(getKey(data, 31.4)); // 32.3 console.log(getKey(data, 32.5)); // 32.3 console.log(getKey(data, 32.8)); // 32.3 console.log(getKey(data, 33.4)); // 34 console.log(getKey(data, 34)); // 34 console.log(getKey(data, 35.1)); // 35.5 console.log(getKey(data, 35.5)); // 35.5 console.log(getKey(data, 100)); // 35.5 console.log('above'); console.log(getKey(data, 0, true)); // 32.3 console.log(getKey(data, 31.4, true)); // 32.3 console.log(getKey(data, 32.5, true)); // 32.3 console.log(getKey(data, 32.8, true)); // 32.3 console.log(getKey(data, 33.4, true)); // 34 console.log(getKey(data, 34, true)); // 34 console.log(getKey(data, 35.1, true)); // 35.5 console.log(getKey(data, 35.5, true)); // 35.5 console.log(getKey(data, 100, true)); // 35.5
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

  • Transforme el objeto en una matriz de elementos mediante Object.entries .
  • Recorra el objeto usando Array.prototype.map y convierta las claves de cadena en números para realizar las comparaciones correctamente.
  • Ordene la matriz por las claves usando Array.prototype.sort .
  • Encuentre la clave según el argumento pos usando Array.prototype.find .
  • Finalmente devuelve el valor correspondiente a la clave encontrada.

 const data = { 32.5: [{ key: "32.5" }], 34: [{ key: "34" }], 35.5: [{ key: "35.5" }] }, getKey = (obj, target, pos) => Object.entries(obj) .map(([k, v]) => [Number(k), v]) .sort(([a], [b]) => a - b) .find(([k], i, a) => pos === "above" ? k >= target : k <= target && (a[i + 1]?.[0] > target || i === a.length - 1) )?.[1]; console.log(getKey(data, 33, "above")); // [{ key: "34" }] console.log(getKey(data, 33, "below")); // [{ key: "32.5" }] console.log(getKey(data, 37, "above")); // undefined console.log(getKey(data, 30, "below")); // undefined

Tabla de referencia:

objetivo abajo arriba
0 undefined [{ key: '32.5' }]
31.4 undefined [{ key: '32.5' }]
32.5 [{ key: '32.5' }] [{ key: '34' }]
32.8 [{ key: '32.5' }] [{ key: '34' }]
33.4 [{ key: '32.5' }] [{ key: '34' }]
34 [{ key: '34' }] [{ key: '34' }]
35.1 [{ key: '34' }] [{ key: '35.5' }]
35.5 [{ key: '35.5' }] [{ key: '35.5' }]
50 [{ key: '35.5' }] undefined
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda