Estoy tratando de filtrar una serie de objetos en función de varias palabras clave de búsqueda.
Puedo filtrar la matriz según la condición OR(||). Pero no estoy seguro de cómo filtrar según la condición AND(&&).
esto es lo que he intentado
let aList = [ { "id": 14, "name": "Summer season", "start_time": "01-03-2022", "end_time": "31-03-2022", }, { "id": 39, "name": "winter", "start_time": "01-05-2022", "end_time": "17-05-2022", }, { "id": 40, "name": "winter season", "start_time": "18-05-2022", "end_time": "31-05-2022", } ]; let filterProperty = ["name","start_time","end_time"]; let searchKeyword = ["winter","18"]; function search(array, textArray, filterColumns) { textArray = textArray.map(t => t.toLowerCase()); return array.filter((a) => { return filterColumns.some((f) => { return textArray.some((t) => { return a[f].toString().toLowerCase().indexOf(t) !== -1; }); }); }); } let result = search(aList, searchKeyword, filterProperty); console.log(result);Obtengo el siguiente resultado (condición O)
[ { "id": 39, "name": "winter", "start_time": "01-05-2022", "end_time": "17-05-2022" }, { "id": 40, "name": "winter season", "start_time": "18-05-2022", "end_time": "31-05-2022" } ]Necesito un resultado como el que se muestra a continuación, ya que el resultado debe basarse tanto en '18' como en 'invierno' (condición Y),
[ { "id": 40, "name": "winter season", "start_time": "18-05-2022", "end_time": "31-05-2022" } ]Esta puede ser una pregunta duplicada, pero no encontré ninguna pregunta similar en este foro. He estado atascado en esto por algún tiempo. ¿Alguien puede ayudar?. ¿Hay alguna otra o mejor manera de lograr una solución a este problema?
Básicamente, en lugar de Array.some , usa Array.every , cuando revisa la matriz searchKeyword.
Cambié las posiciones de filterColumns.some y textArray.every para que la lógica funcione.
let aList = [ { "id": 14, "name": "Summer season", "start_time": "01-03-2022", "end_time": "31-03-2022", }, { "id": 39, "name": "winter", "start_time": "01-05-2022", "end_time": "17-05-2022", }, { "id": 40, "name": "winter season", "start_time": "18-05-2022", "end_time": "31-05-2022", } ]; let filterProperty = ["name","start_time","end_time"]; let searchKeyword = ["winter","18"]; function search(array, textArray, filterColumns) { textArray = textArray.map(t => t.toLowerCase()); return array.filter((a) => { return textArray.every((t) => { return filterColumns.some((f) => { return a[f].toString().toLowerCase().indexOf(t) !== -1; }); }); }); } let result = search(aList, searchKeyword, filterProperty); console.log(result);