דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. פילטר עבור אובייקט מקונן - js

פילטר עבור אובייקט מקונן - js

מתוזמן נעוץ נעול הועבר תכנות
11 פוסטים 4 כותבים 172 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ש.ב.ח.
    כתב ב נערך לאחרונה על ידי
    #1

    שלום וברכה

    יש לי אוביקט מקונן שמחזיק קטגוריות ותתי קטגוריות (בקינון)
    אני מעוניין לפלטר את הרשימה כך שהפילטור יהיה קיים בשני המישורים

    קטגוריה שמחזירה true תופיע כולה כולל הילדים (תתי הקטגוריות)
    תתי קטגוריות (ילדים) שמחזירות true יחזרו הקטגוריה (האב) עם תתי הקטגוריות שהחזירו אמת (כמובן באותו מבנה כמו אובייקט המקור)

    את הצעד הראשון ברור לי שעושים בשימוש עם הfilter
    אך את הצעד השני אשמח להצעתכם, מהי הדרך הקלה ביותר.

    תגובה 1 תגובה אחרונה
    0
    • chagoldC מנותק
      chagoldC מנותק
      chagold
      כתב ב נערך לאחרונה על ידי
      #2

      זה זה?

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        יהי קל להבין עם מבנה דמו, יש מצב?

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        ש תגובה 1 תגובה אחרונה
        0
        • ש מנותק
          ש מנותק
          ש.ב.ח.
          השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
          #4

          @dovid אמר בפילטר עבור אובייקט מקונן - js:

          יהי קל להבין עם מבנה דמו, יש מצב?

          בבקשה https://codesandbox.io/s/dtl9p?file=/src/dropdown.js

          הוא לא כזה קטן.. אבל בס"ה הפונקציה לפילטור כאן (תמונה מתוך הקוד החי):
          b8b42bac-6d6c-4db7-abc9-aac1753fc2cb-image.png

          תגובה 1 תגובה אחרונה
          0
          • ש מנותק
            ש מנותק
            ש.ב.ח.
            כתב ב נערך לאחרונה על ידי
            #5

            @dovid
            אני מנסה באמצעות הפונקציה הזאת אבל יש לי שגיאה
            bab9ff3c-ff9e-4441-b459-644899518ad5-image.png

            השגיאה:
            ec37b6dc-dc79-459c-ab6c-ede41ce385fa-image.png

            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב לש.ב.ח. ב נערך לאחרונה על ידי yossiz
              #6

              @ש-ב-ח לא הבנתי עד הסוף את כל הקוד שלך, אבל האם אתה מודע לזה שההעתקה שעשית

              let filterB = [...filterA];
              

              הינה העתקה "שטחית" לא עמוקה, ככה שיוצא ש-filterB[key] מצביע בדיוק על אותו אובייקט ש-item מצביע.
              או במילים אחרות: filterB[key] === item

              למה זה readonly עוד לא הבנתי

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              ש תגובה 1 תגובה אחרונה
              1
              • ש מנותק
                ש מנותק
                ש.ב.ח.
                השיב לyossiz ב נערך לאחרונה על ידי
                #7

                @yossiz תודה

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  בעצם אתה רוצה לחפש רקורסיבית בתוך האובייקט ובמקרה של הצלחה להחזיר את כל העץ עד לאיבר הנכון ללא "אחים".
                  לי זה נראה אתגר מורכב.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  ש תגובה 1 תגובה אחרונה
                  0
                  • ש מנותק
                    ש מנותק
                    ש.ב.ח.
                    השיב לdovid ב נערך לאחרונה על ידי ש.ב.ח.
                    #9

                    @dovid
                    זה הפונקציה שמספיקה לי
                    כמובן אחרי ההערה/הארה של @yossiz השתמשתי בספריית lodash

                       function filterNested(text){
                    
                            let filterA = items.filter( item => {
                                if(item.label.includes(text)) return true;
                                if(item.childes?.filter( child => child.label.includes(text)).length > 0) return true;
                            } );
                    
                           let filterB = _.cloneDeep(filterA);
                    
                            filterA.forEach((item, key) => {
                               if(item.childes.length > 0){
                    
                                   filterB[key].childes = item.childes.filter(child => child.label.includes(text));
                    
                                   if(filterB[key].childes.length <= 0){
                                      delete filterB[key];
                                   }
                               }
                            });
                    
                            return filterB;
                        }
                    

                    עריכה:
                    עדיין אם הצאצאים לא מחזירים true אבל האב מחזיר - הוא נמחק

                    אז זה העדכון

                    function filterNested(text){
                    
                            let filterA = items.filter( item => {
                                if(item.label.includes(text)) return true;
                                if(item.childes?.filter( child => child.label.includes(text)).length > 0) return true;
                            } );
                    
                           let filterB = _.cloneDeep(filterA);
                    
                            filterA.forEach((item, key) => {
                               if(!item.label.includes(text) && item.childes.length > 0){
                    
                                   filterB[key].childes = item.childes.filter(child => child.label.includes(text));
                    
                                   if(filterB[key].childes.length <= 0){
                                      delete filterB[key];
                                   }
                               }
                            });
                    
                            return filterB;
                        }
                    
                    תגובה 1 תגובה אחרונה
                    2
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי dovid
                      #10

                      השתמשת בlodash רק להעתקת האובייקט..
                      אם כבר יש לך lodash כל דבר תבדוק איך עושים שמה, זה עולם ענק.
                      https://stackoverflow.com/a/34335131/1271037
                      עריכה: זה לא מה שאתה רוצה בכלל, אבל הסינון שמה עובד יופי בלי לולאה, צריך לשפץ קצת...

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      ש תגובה 1 תגובה אחרונה
                      0
                      • ש מנותק
                        ש מנותק
                        ש.ב.ח.
                        השיב לdovid ב נערך לאחרונה על ידי
                        #11

                        @dovid אמר בפילטר עבור אובייקט מקונן - js:

                        אם כבר יש לך lodash כל דבר תבדוק איך עושים שמה, זה עולם ענק

                        אני לא מכיר את הספרייה מלבד פקודה ספציפית זו 😕
                        אני לא אחת שואל את עצמי: "כדי ללמוד משהו אחד צריך ללמוד את כל ה... וכל ה... וכל ה..."
                        (כשאני אומר ללמוד, בכוונתי ששמתי לי מטרה לבניית איזה פרוייקט בלימוד, אמנם בדרך אני נאלץ - לשמחתי - להכיר לא מעט דברים חדשים שאינם נקשרים ללימוד הנוכחי)

                        לשם העניין
                        שמתי לעצמי מטרה (אני יודע שהיא מידי גדולה) ללימוד React בבניית דאשבורד מורכב.

                        תגובה 1 תגובה אחרונה
                        1

                        בא תתחבר לדף היומי!
                        • התחברות

                        • אין לך חשבון עדיין? הרשמה

                        • התחברו או הירשמו כדי לחפש.
                        • פוסט ראשון
                          פוסט אחרון
                        0
                        • דף הבית
                        • קטגוריות
                        • פוסטים אחרונים
                        • משתמשים
                        • חיפוש
                        • חוקי הפורום