• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

126
Views
Javascript: encuentre una propiedad específica en el objeto por valor, que es una lista de cadenas

Tengo que encontrar una propiedad en una matriz de objetos por valor, que es una lista de cadenas.

Por ejemplo, tengo algo como esto:

 const colors ={ colors-1: [{color: 'blue'}], colors-2: [{color: 'gray'}, {color: 'red'}], colors-3: [{color: 'white'}] }

Y quiero obtener, por ejemplo, la propiedad colors-2 por cadena que está dentro del valor de la matriz.

Algo como esto:

 findPropertyByValue(colors, 'red')

Y salida:

 'colors-2'

¿Podría mostrarme cómo lograr esto? Gracias.

about 3 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Así es como puedes lograr lo que quieres. Tenga en cuenta que agregué sus claves de objeto entre comillas, porque contienen - , no funcionaría de otra manera.

 const colors = { "colors-1": [{ color: "blue" }], "colors-2": [{ color: "gray" }, { color: "red" }], "colors-3": [{ color: "white" }] }; function findPropertyByValue(colors, value) { for (let color in colors) { if (colors[color].some((c) => c.color == value)) { return color; } } return ""; // if there isn't one } console.log(findPropertyByValue(colors, "red"));

about 3 years ago · Juan Pablo Isaza Report

0

Aquí hay una solución usando find y some .
Toma las entradas del objeto de colors y encuentra la entrada que tiene un elemento con el color de entrada.
La búsqueda devuelve una entrada con [key,value] por lo que para obtener la clave, tome el elemento 0

Aquí asumí que un solo color tiene una clave única.
añadió el ?. antes de [0] (encadenamiento opcional: acceso solo si está disponible) para que cuando se ingrese un color que no se encuentra, no haya errores (devuelve undefined ). || operador utilizado para devolver un mensaje como "no encontrado" si el paso de búsqueda devuelve undefined

 const colors ={ 'colors-1': [{color: 'blue'}], 'colors-2': [{color: 'gray'}, {color: 'red'}], 'colors-3': [{color: 'white'}] } const findPropertyByValue = (obj,col) => Object.entries(obj).find(([k,v])=>v.some(({color}) => color===col))?.[0] || 'not found' console.log(findPropertyByValue(colors,'white')) console.log(findPropertyByValue(colors,'gray')) console.log(findPropertyByValue(colors,'red')) console.log(findPropertyByValue(colors,'blue')) console.log(findPropertyByValue(colors,'green'))

about 3 years ago · Juan Pablo Isaza Report

0

Puedes probar esto:

 const colors = { "colors-1": [{ color: "blue" }], "colors-2": [{ color: "gray" }, { color: "red" }], "colors-3": [{ color: "white" }], }; function findPropertyByValue(obj, colorName) { return Object.entries(obj).find((entry) => entry[1].some((color) => color.color === colorName) )?.[0]; } console.log(findPropertyByValue(colors, "red")); console.log(findPropertyByValue(colors, "not in list"));

Y esta solución devolverá todos los campos con el color especificado:

 const colors = { "colors-1": [{ color: "blue" }], "colors-2": [{ color: "gray" }, { color: "red" }], "colors-3": [{ color: "white" }], "colors-4": [{ color: "white" }, { color: "red" }], }; function findPropertyByValue(obj, colorName) { return Object.entries(obj).reduce( (acc, entry) => entry[1].some((color) => color.color === colorName) ? [...acc, entry[0]] : acc, [] ); } console.log(findPropertyByValue(colors, "red")); console.log(findPropertyByValue(colors, "not in list"));
about 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error