Digamos que tengo una matriz como esta (estoy agregando letras al azar solo para recrear mi ejemplo un poco mejor).
arr1 = ["appless", "bananarr", "orangeaa", "coconutvv", "pineapplevv"]Luego tengo un grupo de objetos.
const objects: [{ name: "john", job: "carpenter", color: "blue" status: "banana"}, { name: "john", job: "plumber", favorites: "banana", "apple", "orange", color: "blue", "purple"}, { name: "john", job: "carpenter", favorites: "orange", "pineapple", gender: "female"}]Como puede ver, mis objetos tienen diferentes propiedades, pero muchos valores coinciden con uno o más valores en mi arr1. Ahora, para cada valor que coincida principalmente con una de las cadenas en mi arr1, quiero reemplazar el índice del valor coincidente en arr1 en el valor del objeto (como se muestra a continuación), para cada objeto y para cada propiedad.
Resultado de ejemplo:
const objects: [{ name: "john", job: "carpenter", color: "blue" status: 1}, { name: "john", job: "plumber", favorites: 1, 0, 2, color: "blue", "purple"}, { name: "john", job: "carpenter", gender: "female", 2}]Lo que estoy tratando de hacer en realidad es reemplazar dinámicamente los valores de cadena de bibliotecas/tecnologías/frameworks/etc (es decir, "Reaccionar") de un proyecto de cartera (los objetos se obtienen de un json local) con sus respectivos íconos (para que estoy usando iconos de React). No quiero ir a editar el json directamente.
Puse todos los componentes de íconos que necesito en una matriz, luego los usé para hacer una copia de la matriz con los valores de "cadena" de esos componentes de íconos (array.map).
Para obtener el índice: CREO que es mejor intentar hacer coincidir arr1 uno por uno ("favoritos", "estado" y "género" en este ejemplo), algo así como objects.map(object=>{object.favorites.includes("orangeaa").indexOf()} ??
No todos los objetos tienen una propiedad de "favoritos", por lo que obtendré algunos resultados indefinidos... Una vez que logre obtener ese número de índice, lo usaré para representar el ícono real. Como estoy usando reaccionar, será algo como esto:
{object.favorites && (<div> <h3>Favs:</h3>{object.favorites.map(i=><p key={i}>{iconComponentsArray[i]}</p>)}Puede mapear los favoritos con los índices de la matriz de destino.
function getIndices(values, targets) { return values.map(s => targets.findIndex(t => t.includes(s))); } console.log(getIndices( ["banana", "apple", "orange"], ["appless", "bananarr", "orangeaa", "coconutvv", "pineapplevv"] ));