Estoy tratando de filtrar a través de un gran conjunto de datos que tiene una matriz anidada dentro de cuyos valores necesito compararlos con una cadena. Para compararlos, necesito limpiar las cadenas porque proviene de la entrada del usuario y el espaciado/mayúsculas puede variar. Así que mis funciones funcionaban a través de un filtro que se veía así
los datos inicialmente parecían
formularyOptions = [{Condition: "headache"...}{Condition: "hair loss"..}...] chiefComplaint = "Headache" const cleanText = (value) => { let str = value; if (!str) { return value; } str = str.toLowerCase(); str = str.replace(/\s/g, ""); return str; }; let formularyList = formularyOptions.filter( (item) => !!chiefComplaint && cleanText(item.Condition) === cleanText(chiefComplaint), );Y esto funcionó bien, pero ahora
Mis datos se ven así:
[{Condition: ["headache", "migraine"]...}{Condition: ["hair loss"]..}...]Intenté cambiar mi filtro para recorrer la matriz de Condiciones, pero eso no devuelve nada por alguna razón que no entiendo. Y el método include no funcionará ya que distingue entre mayúsculas y minúsculas. Cualquier consejo sobre cómo abordar esto o incluso por qué un forEach no funcionaría dentro de un .filter sería muy útil. Este es mi intento con un bucle for:
let formularyList = formularyOptions.filter( (item) => !!chiefComplaint && item.Condition.forEach((condition) => cleanText(condition) === cleanText(chiefComplaint)), );que simplemente devuelve una matriz vacía ...
Estás incluyendo un .forEach(...) dentro de un condicional booleano, pero es nulo, solo se repite, no se devuelve nada.
Creo que en realidad necesitas usar .some(...) en su lugar, que intentará encontrar algún elemento que corresponda a la condición:
let formularyList = formularyOptions.filter( (item) => !!chiefComplaint && item.Condition.some((condition) => cleanText(condition) === cleanText(chiefComplaint)), );