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

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

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

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

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

    שלום וברכה

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

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

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

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

      זה זה?

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

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

        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
        ש תגובה 1 תגובה אחרונה
        0
        • dovidD 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
            • ש ש.ב.ח.

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

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

              yossizY מנותק
              yossizY מנותק
              yossiz
              כתב ב נערך לאחרונה על ידי yossiz
              #6

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

              let filterB = [...filterA];
              

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

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

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

              ש תגובה 1 תגובה אחרונה
              1
              • yossizY yossiz

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

                let filterB = [...filterA];
                

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

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

                ש מנותק
                ש מנותק
                ש.ב.ח.
                כתב ב נערך לאחרונה על ידי
                #7

                @yossiz תודה

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

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

                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                  ש תגובה 1 תגובה אחרונה
                  0
                  • dovidD 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
                      • dovidD dovid

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

                        ש מנותק
                        ש מנותק
                        ש.ב.ח.
                        כתב ב נערך לאחרונה על ידי
                        #11

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

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

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

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

                        תגובה 1 תגובה אחרונה
                        1
                        תגובה
                        • תגובה כנושא
                        התחברו כדי לפרסם תגובה
                        • מהישן לחדש
                        • מהחדש לישן
                        • הכי הרבה הצבעות


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

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

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