Avatar billede EXstorm Praktikant
04. november 2018 - 15:41 Der er 1 kommentar

Filtrer array fra et andet array

Hej
Jeg vil gerne filtrere items fra categories array ud fra kriterier i  otherCategories array.

Hvis otherCategories indeholder det object hvor title matcher en title fra categories.subCategory[i].title og name matcher categories.subCategory[i].details.name så filtrer kun det object. feks "item1" fra
categories

var categories = [
{
    title:"item1",
    subCategory:[
        {
            title:"subCat1",
            details:{
                name:"detail1",
                email:"test@test.com"
            }
        },
        {
            title:"subCat2",
            details:{
                name:"detail2",
                email:"test@test.com"
            }
        }
    ]
},
{
    title:"item2",
    subCategory:[
        {
            title:"subCat1",
            details:{
                name:"detail3",
                email:"test@test.com"
            }
        },
        {
            title:"subCat2",
            details:{
                name:"detail2",
                email:"test@test.com"
            }
        }
    ]
}
]

var otherCategories = [
{
    title:"subCat1",
    name:"detail1"       
},
{
    title:"subCat2",
    name:"detail1"       
}
]

Det forventede resultat

categories = [
{
    title:"item1",
    subCategory:[
        {
            title:"subCat1",
            details:{
                name:"detail1",
                email:"test@test.com"
            }
        }
    ]
}]
Avatar billede HBP2 Praktikant
06. november 2018 - 21:55 #1
Hej.

Der er ikke nogen generel, effektiv løsning på problemet. Du er nok nødt til at løbe categories[] igennem, og for hvert element tjekke om det matcher noget i otherCategories[].

Uden at have afprøvet det:

function filterfn(el, filter) {
  for (var name in filter)
  if (el[name] !== filter[name])
    return false;
  return true;
}

var res = [];
for (var i = 0; i < categories.length; i++)
  for (var j = 0; j < otherCategories.length; j++)
    if (filterfn(categories[i], otherCategories[j]))
    res.push(categories[i]);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester