Hi Rolf,
anhand deiner Lösung habe ich hier einen fertigen Code erstellen können. Ist etwas abgeändert.
Vielen Dank an alle!
/** Array mit Filmen */
const arrMovies = [
{
Titel: 'Prometheus',
Genre: 'Science-Fiction,Fantasy',
Tags: 'Favorit,Weltall'
},
{
Titel: 'Arrival',
Genre: 'Science-Fiction,Fantasy',
Tags: 'Weltall'
},
{
Titel: 'Pirates of the Caribbean Salazars Rache',
Genre: 'Abenteuer,Fantasy',
Tags: 'Piraten,Meer'
},
{
Titel: 'Shutter Island',
Genre: 'Drama,Thriller',
Tags: 'Favorit,De Caprio'
}
];
/** Array mit Filtern */
const arrFilter = {
Genre: ['Abenteuer','Action','Thriller'],
Tags: ['New York','Favorit','Top10']
};
/** Gefiltertes Array mit Filmen */
let dataset = [];
/**
* Filtern
*/
/** arrFilter[] wird durchlaufen */
for(let filterWord in arrFilter){
/**
* Wenn ein Wert wie z.B. "Abenteuer" aus arrFilter[filterWord] (z.B. arrFilter['Genre']) in einem der Elemente aus arrMovies['Genre'] enthalten ist, speicher diesen Datensatz im Array filterCheck
* arrFilter['Genre']['Abenteuer','Action','Thriller'] würde mit dieser einen Zeile zwei Elemente aus arrMovies[] in filterCheck[] speichern.
* arrFilter['Tags']['Favorit'] würde mit dieser einen Zeile zwei Elemente aus arrMovies[] in filterCheck[] speichern.
*/
let filterCheck = arrMovies.filter(movie => arrFilter[filterWord].some(genre => movie[filterWord].includes(genre)));
/** filterCheck[] Elemente enthält */
if(filterCheck.length){
/** filterCheck[] durchlaufen */
for(let filterCheckElement of filterCheck){
/** Wenn dataset[] das Array Element aus dem Array filterCheck[] nicht enthält */
if(!dataset.includes(filterCheckElement)){
/** Füge das Array Element aus dem Array filterCheck[] dem Array dataset[] hinzu */
dataset.push(filterCheckElement);
}
}
}
}
/** Ausgabe des Arrays dataset[], welche alle Datensätze gefiltert aus arrMovies[] enthält */
console.log('dataset final: ', dataset);
Gruß ebody