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

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

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

הדרך הקלה למצוא מספר בין לבין - js

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

    שלום וברכה

    יש לי מערך אם אובייקטים שבכל אובייקט יש איזה אחד הערכים שהוא מספר
    למשל:

    const regular = [
                        {
                            amount: 36000,
                            innerPrograms:[
                                { ... },
                                { ... },
                            ]
                        },
                        {
                            amount: 100000,
                            innerPrograms:[
                                { ... },
                                { ... },
                            ]
                        },
                        {
                            amount: 300000,
                            innerPrograms:[
                                { ... },
                                { ... },
                            ]
                        },
    ];
                       
    

    כנגדו יש לי מספר שאני צריך לבדוק לאיזה מערך הוא שייך - שווה או יותר מהמספר (כמובן רק לאחד מהם, כלומר אם מדובר ב300000 הוא יהיה שייך רק לאחרון)

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

    השאלה אם הדרך הנכונה היא אכן כך אלא שיש ראשית לסדר את המערך שיהיה מהקטן לגדול או שיש דרך קלה יותר?

    dovidD תגובה 1 תגובה אחרונה
    0
    • ש ש.ב.ח.

      שלום וברכה

      יש לי מערך אם אובייקטים שבכל אובייקט יש איזה אחד הערכים שהוא מספר
      למשל:

      const regular = [
                          {
                              amount: 36000,
                              innerPrograms:[
                                  { ... },
                                  { ... },
                              ]
                          },
                          {
                              amount: 100000,
                              innerPrograms:[
                                  { ... },
                                  { ... },
                              ]
                          },
                          {
                              amount: 300000,
                              innerPrograms:[
                                  { ... },
                                  { ... },
                              ]
                          },
      ];
                         
      

      כנגדו יש לי מספר שאני צריך לבדוק לאיזה מערך הוא שייך - שווה או יותר מהמספר (כמובן רק לאחד מהם, כלומר אם מדובר ב300000 הוא יהיה שייך רק לאחרון)

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

      השאלה אם הדרך הנכונה היא אכן כך אלא שיש ראשית לסדר את המערך שיהיה מהקטן לגדול או שיש דרך קלה יותר?

      dovidD
      dovidD
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

      @ש-ב-ח כפי שאמרת, הדרך הקלה זה לעבוד עם אובייקט ממויין.
      אז השאלה היא איך ממיינים מערך בJS:

      var sorted = regular.sort((a, b) => a.amount - b.amount);
      

      אח"כ כפי שהצעת אז קל למצוא ככה:

      function getNearestAmount(sortedRegular input) {
        //מחפש את אינדקס האיבר הראשון שגדול מהערך המבוקש
        var nextOfInput = sortedRegular.findIndex(x => x.amount > input);
        
        if(nextOfInput == -1) //אם הוא לא מצא - כולם קטנים,
          return sortedRegular[sortedRegular.length - 1];
        if(nextOfInput == 0) 
          return sortedRegular[0];
        
        return sortedRegular[nextOfInput - 1];
      }
      

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

      התשובה שלי לקוחה מהתשובה היפה של @yossiz פה.

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      ש תגובה 1 תגובה אחרונה
      3
      • dovidD dovid

        @ש-ב-ח כפי שאמרת, הדרך הקלה זה לעבוד עם אובייקט ממויין.
        אז השאלה היא איך ממיינים מערך בJS:

        var sorted = regular.sort((a, b) => a.amount - b.amount);
        

        אח"כ כפי שהצעת אז קל למצוא ככה:

        function getNearestAmount(sortedRegular input) {
          //מחפש את אינדקס האיבר הראשון שגדול מהערך המבוקש
          var nextOfInput = sortedRegular.findIndex(x => x.amount > input);
          
          if(nextOfInput == -1) //אם הוא לא מצא - כולם קטנים,
            return sortedRegular[sortedRegular.length - 1];
          if(nextOfInput == 0) 
            return sortedRegular[0];
          
          return sortedRegular[nextOfInput - 1];
        }
        

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

        התשובה שלי לקוחה מהתשובה היפה של @yossiz פה.

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

        @dovid אמר בהדרך הקלה למצוא מספר בין לבין - js:

        if(nextOfInput == 0)
        return sortedRegular[0];
        
        return sortedRegular[nextOfInput - 1];
        

        למה יהיה שונה 0 ממס' אחר?

        dovidD תגובה 1 תגובה אחרונה
        0
        • ש ש.ב.ח.

          @dovid אמר בהדרך הקלה למצוא מספר בין לבין - js:

          if(nextOfInput == 0)
          return sortedRegular[0];
          
          return sortedRegular[nextOfInput - 1];
          

          למה יהיה שונה 0 ממס' אחר?

          dovidD
          dovidD
          dovid
          ניהול
          כתב ב נערך לאחרונה על ידי dovid
          #4

          @ש-ב-ח השורה האחרונה שציטטת בעצמך עונה על השאלה.

          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
          תגובה 1 תגובה אחרונה
          1

          שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

          נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

          בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

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


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

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

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