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 correctEditar: 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/
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))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;
exampleObjectValues no contiene value , devuelve -1exampleObjectValuesobjectValueIndex (paso 2.1)-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)); // 0Lo anterior generará:
1 -1 -2 0