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

154
Vistas
problemas con la iteración a través de valores en pares clave/valor

Escribí una función que busca a través de los valores de un objeto. La clave se devuelve cuando se confirma que la clave coincide con el índice del valor almacenado en la matriz.

p.ej. 19 está en el índice 0 en la matriz, y en el objeto, la clave para 19 es 0. Dado que esto coincide, se devuelve la clave.

Sin embargo, si el valor se encuentra en el objeto pero el índice es incorrecto en la matriz, se devuelve -2. Finalmente, cuando no se encuentra un valor en el objeto, se devuelve -1.

Desafortunadamente, mi función no funciona según lo previsto. Tenía la sensación de que la función no reconoce los valores en el objeto como el mismo tipo de datos que los de la matriz, así que usé == en lugar de === para las comparaciones, pero el resultado es el mismo.

 const exampleObject = { 0: 19, 1: 20, 2: 21, 3: 22 }; function getKey(array, object, value) { for (const prop in object) { if (object.hasOwnProperty(prop)) { if (object[prop] === value && array[object[prop]] == value ){ return prop } else if (object[prop] === value && array[object[prop]] !== value ){ return -2 } } } return -1 } console.log(getKey([19,20,22,21],exampleObject,20)) //returns -2 which is wrong as the index is correct console.log(getKey([19,20,22,21],exampleObject,25)) //returns -1 which is correct console.log(getKey([19,20,22,21],exampleObject,22)) //returns -2 which is correct console.log(getKey([19,20,22,21],exampleObject,19)) //returns -2 which is wrong as the index is correct

Editar: utilicé el código de este sitio y lo ajusté un poco: https://www.geeksforgeeks.org/how-to-get-a-key-in-a-javascript-object-by-its-value/

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Solo necesita usar array[prop] en lugar de array[object[prop]] ya que object[prop] devolverá el valor pero desea la clave.

 const exampleObject = { 0: 19, 1: 20, 2: 21, 3: 22 }; function getKey(array, object, value) { for (const prop in object) { if (object.hasOwnProperty(prop)) { if (object[prop] === value && array[prop] === value) { return prop } else if (object[prop] === value && array[prop] !== value) { return -2 } } } return -1 } console.log(getKey([19, 20, 22, 21], exampleObject, 20)) console.log(getKey([19, 20, 22, 21], exampleObject, 25)) console.log(getKey([19, 20, 22, 21], exampleObject, 22)) console.log(getKey([19, 20, 22, 21], exampleObject, 19))

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si su objeto siempre usa 0 - n como claves, esto se puede simplificar un poco.

Entonces, supongamos que el objeto siempre tiene claves numéricas, comenzando en 0 y aumentando en 1 .

En ese caso, podemos definir una matriz auxiliar, que contiene todos los valores del objeto de la siguiente manera:

 const exampleObjectValues = Object.values(exampleObject);

Ahora, podemos crear una función simple usando la siguiente lógica;

  1. Si exampleObjectValues no contiene value , devuelve -1
  2. De lo contrario,
    1. Obtener el índice de la matriz de entrada
    2. Obtenga el índice de exampleObjectValues
    3. Compáralos y:
      1. Si coinciden, devuelva el objectValueIndex (paso 2.1)
      2. Si no coinciden, devuelve -2

 const exampleObject = { 0: 19, 1: 20, 2: 21, 3: 22 }; const exampleObjectValues = Object.values(exampleObject); function getKey(array, value) { if (!exampleObjectValues.includes(value)) { return -1; } else { const arrayIndex = array.indexOf(value); const objectValueIndex = exampleObjectValues.indexOf(value); return (arrayIndex !== objectValueIndex) ? -2 : objectValueIndex; } } console.log(getKey([19,20,22,21] ,20)); // 1 console.log(getKey([19,20,22,21], 25)); // -1 console.log(getKey([19,20,22,21], 22)); // -2 console.log(getKey([19,20,22,21], 19)); // 0

Lo anterior generará:

 1 -1 -2 0
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