Announcement

Collapse
No announcement yet.

Brauche Hilfe bei Array Filterung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Brauche Hilfe bei Array Filterung

    Hey zusammen, ich hoffe jmd von euch kann mir weiterhelfen. Ich möchte gerne ein verschachteltes Array filtern und alle Einträge drin lassen, welche als Label, in dem Fall hier 'test', enthalten. Alle anderen sollen raus. Ich habs jetzt schon mit filter versucht, aber ich schaff es nicht alle Ebenen bis nach unten durch zu Filtern. Nur die erste Ebene.

    Code:
    items: [
           {
             id: 1,
             label: 'Label 1 (test)',
             checked: false,
             children: [
               {
                 id: 12,
                 label: ''Label 1/2',
                 checked: false,
                 children: [
                   {
                     id: 121,
                     label: ''Label 1/12/121',
                     checked: false,
                     children: [
                       {
                         id: 1211,
                         label: ''Label 1/12/121/1211',
                         checked: false,
                       },
                       {
                         id: 1212,
                         label: ''Label 1/12/121/1212 (test)',
                         checked: false,
                       },
                       {
                         id: 1213,
                         label: ''Label 1/12/121/1213 (test)',
                         checked: false,
                       },
                     ],
                   },
                   {
                     id: 122,
                     label: ''Label 1/12/122',
                     checked: false,
                     children: [],
                   },
                 ],
               },
               {
                 id: 13,
                 label: 'Label 1/13 (test)',
                 checked: false,
                 children: [],
               },
             ],
           },
           {
             id: 2,
             label: 'Label 2',
             checked: false,
             children: [
               {
                 id: 21,
                 label: ''Label 2/21',
                 checked: false,
                 children: [
                   {
                     id: 211,
                     label: ''Label 2/21/211',
                     checked: false,
                     children: [],
                   },
                   {
                     id: 212,
                     label: ''Label 2/21/212 (test)',
                     checked: false,
                     children: [],
                   },
                 ],
               },
               {
                 id: 22,
                 label: 'Label 2/22 (test)',
                 checked: false,
                 children: [],
               },
             ],
           },
         ];
    
    let filteredlist = items.filter((elements) => {
                return elements.label.indexOf('test') !== -1
              })
    Danke schon mal im Voraus

  • #2
    Was hindert dich daran, einfach Schleifen über das Array zu legen und es eben "zu Fuß" machen....
    Christian

    Comment


    • #3
      Ich wollte den Code schlank halten und nicht so aufblähen. Daher dachte ich, dass das sicherlich iwie einfacher und effizienter machbar ist.

      Comment


      • #4
        Die Funktion filtert imho nur eindimensional.
        Dann schreibe eine function fürs filtern und dein Hauptcode ist klein, nur ein Funktionsaufruf

        https://stackoverflow.com/questions/...-array/9207018
        Christian

        Comment


        • #5
          Ich habs jetzt glaub ich ganz kompakt hinbekommen und schaut auf den ersten Blick zu funktionieren, falls mal jmd anders das selbe Problem hat

          Code:
          search = 'test'; //Wert kommt später dann dynamisch aus nem Input-Feld
          
          function filterelement(element) {
             if (JSON.stringify(element).toLowerCase().search(search) !== -1) {
                return true;
             } else {
                return element.label.toLowerCase().indexOf(search) !== -1;
             }
          }
          
          const itemFilter = items => items
             .map(item => item.children
                ? { ...item, children: itemFilter(item.children) }
                 : item
             )
             .filter(filterelement)

          Comment

          Working...
          X