Я думаю, что проверка массива как истинного значения вместо длины массива была вашей самой большой проблемой.
Тем не менее, я также думаю, что это можно было бы написать проще, переместив повторяющийся код в функции и простоработает один filter
.Если вам не нравятся троичные операторы, вы можете заменить то, что у меня есть, вашими предложениями if
/ if else
(но не забывайте о возвратах).
const searchQuery = "ben";
const pattern = [];
const exercises = [
{
name: "bench press",
movement: ["push", "pull", "squat", "hinge"]
},
{
name: "squat",
movement: ["push", "pull", "squat", "hinge"]
},
{
name: "squat",
movement: ["squat", "hinge"]
},
{
name: "pushup",
movement: ["push", "pull", "squat", "hinge"]
},
{
name: "pullup",
movement: ["pull", "squat", "hinge"]
},
{
name: "bent over row",
movement: ["push", "pull", "hinge"]
}
];
const excerciseTest = (name, searchQuery) => {
return name.toLowerCase().includes(searchQuery.toLowerCase())
}
const patternTest = (movement, pattern) => {
return movement.some(movement => {
return pattern.some(pattern => pattern === movement)
})
}
const filteredExercises = exercises.filter(excercise => {
// if (searchQuery && pattern.length > 0)
return (searchQuery && pattern.length > 0)
? excerciseTest(excercise.name, searchQuery) && patternTest(excercise.movement, pattern)
// else if (pattern.length > 0)
: pattern.length > 0
? patternTest(excercise.movement, pattern)
// else if (searchQuery)
: searchQuery
? excerciseTest(excercise.name, searchQuery)
: false
})
console.log(filteredExercises)