1 svar
30 visningar
ClasWasHere 1
Postad: 9 maj 2020 Redigerad: 9 maj 2020

Array: Sortera array med många alternativ

Jag har en html hemsida som har många checkboxes. Dom ska filtrera en array som sedan ska visas när man trycker på en html knapp.

Min Array:


var ImgList = [
{ImgName:"img1",ImgLink:"#", Funny:false, Animals:true},
{ImgName:"img2",ImgLink:"#", Funny:true, Animals:false},
{ImgName:"img3",ImgLink:"#", Funny:true, Animals:false}
];


Jag har försökt med:

const nyLista= ImgList.filter(obj => obj.FunnyImg === true);

console.log(nylista);

Men då har jag använt en checkbox och eftersom jag vill ha flera checkboxes som ska filtrera listan mer än en gång och med olika values för varje checkbox.

Så hur filtrerar jag listan på bästa sätt?  

Laguna 8580
Postad: 10 maj 2020 Redigerad: 10 maj 2020

Ska FunnyImg i ditt förslag vara Funny, som det står i koden övanför?

Man får hitta ett booleskt uttryck för när det ska matcha, givet objektet och checkboxen. Om vi kallar tillhörande checkbox-värde för checkfunny (som man har plockat fram med findObject("FunnyBox").nånting, jag kan inte det här utantill) så vill vi att objektet ska väljas när både funnybox och obj.Funny är sanna, och vi vill också alltid ha med det om funnybox är falsk, för då ska vi inte välja bort något, om jag har förstått uppgiften rätt.

Det booleska uttrycket blir:

    obj.Funny || !funnybox

(nu har jag tagit bort jämförelsen === true, för det borde inte behövas med booleska värden). Man kan se logiken som att ett objekt ska filtreras bort precis närcheckboxen är ikryssad men objektet inte har den egenskapen.

Koden för dina båda egenskaper kan bli så här:

    const nyLista= ImgList.filter(obj => (obj.Funny || !funnybox) && (obj.Animals || !animalsbox));

Man kan också loopa över alla checkboxar som finns och filtrera på en i taget.

Om man har ett stort antal checkboxar så kan man vilja gå igenom dem i en loop i stället för att namnge dem en och en.

Svara Avbryt
Close