Мне нужно отфильтровать некоторые данные на основе нескольких значений.Language
, title
и slug
[
{
de: "4567uy55",
en: "654321",
lang: [
{
id: "654321",
language: "English",
title: "Title1"
},
{
id: "4567uy55",
language: "German",
title: "Title2"
}
],
slug: 'some-slug'
},
...
]
То, что у меня сейчас есть, возвращает все объекты, которые имеют один или часть фильтров (в случае, если заголовок равен This is a title
, слово this
должносоответствовать), но мне нужно вернуть объекты, которые имеют все из них.Я использовал объект flattner только для того, чтобы получить все свойства и значения в одном объекте, но я не могу заставить его фильтровать так, как мне нужно.
multiFilter = (arr, filters) => {
console.log(filters)
console.log(arr)
let newArray = []
for (let c of arr) {
let flatCourse = flatten(c)
for (let k in flatCourse) {
const keyArr = k.split('/')
const filterKeys = Object.keys(filters)
Object.keys(filters).map((key) => {
if (keyArr.includes(key)) {
const flatVal = flatCourse[k].toString().toLowerCase()
const filterVal = filters[key].toString().toLowerCase()
console.log(flatVal)
console.log(filterVal)
if (flatVal.includes(filterVal)) {
arr = []
arr.push(c)
newArray.push(c)
}
}
})
}
}
return newArray
}
Фильтры выглядят так:
[
language:["English"],
title: ["Some title"],
slug:["some slug"]
]