Me gustaría encontrar una solución que devuelva el siguiente resultado cuando cualquiera de los "valores" de la propiedad sea verdadero.
Esto es lo que he intentado hasta ahora, pero hasta ahora no ha funcionado
public displayCondition(data:any){ const items = data.status.map((status: { value: boolean; }) =>{ staus.value === true; }) return items;
}
Aporte
const data: [ { name: "php", status: [ { value: "true" }, { value: "false" } ] }, { name: "java", status: [ { value: "false" }, { value: "false" } ] } ]
Producción
[ { name: "php", status: [ { value: "true" }, { value: "false" } ] } ]
Su estructura de datos tiene un antipatrón: usa cadenas "true"
y "false"
como booleanos true
y false
. Sugiero convertirlo a booleanos reales a menos que tenga una razón muy convincente para hacerlo de otra manera. Debería ser posible decir if (data[0].status[0]) {...}
pero esa es una condición siempre cierta cuando usa cadenas.
En su código original, la condición staus.value === true;
siempre es falso ya que compara una cadena con un booleano.
He aquí cómo hacer la conversión:
const data = [ { name: "php", status: [ {value: "true"}, {value: "false"} ] }, { name: "java", status: [ {value: "false"}, {value: "false"} ] } ]; data.forEach(e => e.status.forEach(e => { e.value = e.value === "true"; })); console.log(data);
Volvamos al problema principal. map
no se usa para buscar una matriz; se usa para aplicar una transformación en cada entrada de una matriz.
Pruebe .filter
(devuelve todos los elementos que coincidan con un predicado) y .some
(devuelve verdadero si el predicado es verdadero para cualquier elemento de una matriz; de lo contrario, es falso):
const data = [ { name: "php", status: [ {value: "true"}, {value: "false"} ] }, { name: "java", status: [ {value: "false"}, {value: "false"} ] } ]; const result = data.filter(e => e.status.some(e => e.value === "true")); console.log(result); // or if you made the boolean conversion: //const result = data.filter(e => e.status.some(e => e.value));
Use .find
en lugar de .filter
si desea que solo el primer elemento coincida con el predicado (o nulo si no coincide ninguno).
Puede usar los métodos Array#filter
y Array#some
y desestructurar objetos de la siguiente manera:
const data = [ { name: "php", status: [ { value: "true" }, { value: "false" } ] }, { name: "java", status: [ { value: "false" }, { value: "false" } ] } ], output = data.filter( ({status}) => status.some( ({value}) => value === "true" ) ); console.log( output );