Tengo una función js que lee un archivo JSON y los genera con un bucle:
response.data.forEach((item,index)=>{ items += " <div class='eleman'>" + "<img src='"+item.teamMember.profileImageUrl+"' width='100%'>" + "<div class='content list'>" + "<div class='fullname'>"+item.teamMember.fullName+"</div>"+ ...
Hay una matriz en ese json llamada customFields (item.teamMember.customFields) y podría tener de 0 a 7 índices, el ejemplo de uno de ellos debería ser:
id : 1202 name : Tags type : SingleLineText value : Composer,Music,Pan's Labyrinth
Quiero obtener el valor del índice cuyo nombre es ByLine. Y utilícelo con el nombre completo div.
Probé varios códigos pero no funcionaron. Agradecería si alguien puede ayudar.
A continuación se suponen a partir de la pregunta:
response.data
es una matrizteamMember
teamMember
tiene un accesorio llamado customFields
que es una matrizname
de apoyo El objetivo es filtrar solo aquellos elementos de la matriz customFields
donde el name
del elemento coincide con el valor ByLine
.
Una forma posible de lograr esto:
const getIndexOfByLine = (arr = item.teamMember.customFields, matchNameWith = 'ByLine') => ( arr .map((el, i) => ({elt: el, idx: i})) .filter(obj => obj.name === matchNameWith) .map(obj => obj.idx) [0] );
NOTA: Si más de 1 elemento tiene el name
'ByLine', solo se devuelve el primer índice.
Explicación
item.teamMember.customFields
usando el map
con el elemento como el
y el índice como i
.elt
e idx
.map((el, i) => ({elt: el, idx: i}))
name
coincida con ByLine
(se puede cambiar a través del parámetro matchNameWith
) .filter(obj => obj.name === matchNameWith)
elt
e idx
. Dado que solo requerimos el índice, map
la matriz para obtener solo el índice. .map(obj => obj.idx)
name
, simplemente use la primera aparición. [0]
Usé esto y funcionó
let byline=item.teamMember.customFields.filter(checkbyline); function checkbyline(fields) { if (fields.name == 'Byline') { return fields.value} else {return } }
y usarlo en la salida HTML
byline[0].value