Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

152
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!