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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. רג'קס - זיהוי חזרה של אותה אות (ליד תוים קבועים) מעל/מתחת כמות חזרות מסוימת

רג'קס - זיהוי חזרה של אותה אות (ליד תוים קבועים) מעל/מתחת כמות חזרות מסוימת

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

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

    const cities = [
        { name: 'אופקים', info1: 'etfea', info2: 'qdkwc' },
        { name: 'אחיסמך', info1: 'sxrez', info2: 'fqiln' },
        { name: 'אילת', info1: 'zfish', info2: 'qzbzl' },
        { name: 'אלעד', info1: 'ffobv', info2: 'ioydt' },
        { name: 'אשדוד', info1: 'cfaei', info2: 'dncdz' },
        { name: 'אשקלון', info1: 'wtmks', info2: 'jfjme' },
        { name: 'באר יעקב', info1: 'asjju', info2: 'ymjxl' },
        { name: 'באר שבע', info1: 'vvfkc', info2: 'dfynw' },
        { name: 'בית שאן', info1: 'xkzkq', info2: 'varnr' },
        { name: 'בית שמש', info1: 'dledu', info2: 'sbyvd' },
        { name: 'ביתר עילית', info1: 'slsuh', info2: 'rluhh' },
        { name: 'בני ברק', info1: 'zuxou', info2: 'voayu' },
        { name: 'גבעת זאב', info1: 'tgcmh', info2: 'mozie' },
        { name: 'גן יבנה', info1: 'izoqz', info2: 'xkbfd' },
        { name: 'דימונה', info1: 'dviqq', info2: 'jtghy' },
        { name: 'הרצליה', info1: 'ruzxq', info2: 'wpawt' },
        { name: 'זכרון יעקב', info1: 'jlrqv', info2: 'zfyvy' },
        { name: 'חדרה', info1: 'dbgbf', info2: 'mwzzi' },
        { name: 'חולון', info1: 'mtaqw', info2: 'ffsnq' },
        { name: 'חיפה', info1: 'iiiww', info2: 'rzhyd' },
        { name: 'חריש', info1: 'xikeo', info2: 'ncblo' },
        { name: 'טבריה', info1: 'ggbhh', info2: 'eorqr' },
        { name: 'טלזסטון - קרית יערים', info1: 'pxuxk', info2: 'zpxxu' },
        { name: 'ירוחם', info1: 'mczdy', info2: 'evanu' },
        { name: 'ירושלים', info1: 'xunwb', info2: 'dlnrd' },
        { name: 'כפר גדעון', info1: 'cosoj', info2: 'qffyk' },
        { name: 'כרמיאל', info1: 'zlcel', info2: 'rbegx' },
        { name: 'לוד', info1: 'mbbrx', info2: 'xxtef' },
        { name: 'מגדל העמק', info1: 'evwci', info2: 'regub' },
        { name: 'מודיעין עילית', info1: 'cachx', info2: 'jivjk' },
        { name: 'מטולה', info1: 'xilhl', info2: 'tuuow' },
        { name: 'מירון', info1: 'iegup', info2: 'mjedq' },
        { name: 'מעלה אדומים', info1: 'qogvy', info2: 'fmfja' },
        { name: 'מצפה רמון', info1: 'idrjo', info2: 'ixrnr' },
        { name: 'נהריה', info1: 'wccxn', info2: 'rljmn' },
        { name: 'נתיבות', info1: 'wafxa', info2: 'bbnkb' },
        { name: 'נתניה', info1: 'idlib', info2: 'hdcvz' },
        { name: 'עכו', info1: 'cpeuc', info2: 'szhoj' },
        { name: 'עפולה', info1: 'dlhvp', info2: 'efhnq' },
        { name: 'ערד', info1: 'pvaww', info2: 'kgxce' },
        { name: 'פתח תקוה', info1: 'zmntv', info2: 'fkmzq' },
        { name: 'צפת', info1: 'fkyjj', info2: 'ktgdm' },
        { name: 'קרית אתא', info1: 'rkrnf', info2: 'nsgdf' },
        { name: 'קרית גת', info1: 'bpncv', info2: 'ufjt' },
        { name: 'קרית מלאכי', info1: 'zxywb', info2: 'bwqff' },
        { name: 'קרית שמונה', info1: 'minjd', info2: 'djqxk' },
        { name: 'ראש העין', info1: 'hzxxt', info2: 'mgxru' },
        { name: 'ראשון לציון', info1: 'lppkq', info2: 'jvtxn' },
        { name: 'רחובות', info1: 'ylmef', info2: 'bopbi' },
        { name: 'רכסים', info1: 'fvlqk', info2: 'edxgi' },
        { name: 'רמלה', info1: 'yrxiq', info2: 'uzxax' },
        { name: 'רעננה', info1: 'taasg', info2: 'gkcuj' },
        { name: 'תפרח', info1: 'wrkxj', info2: 'yhwaq' },
    ]
    

    אני רוצה לזהות לפי האות הראשונה בשדה name של כל עיר, את החזרה שלה. כלומר: אני רוצה לקבל לדוגמה את הרשימה של הערים שהאות שמתחילה את שמם חוזרת על עצמה מעל/מתחת כמות מסוימת. לדוגמה לפחות 6 פעמים (לדוגמה האות א').
    לכאורה הדרך לעשות זאת זה על ידי חיפוש של האות הראשונה שאחרי כל name: ', או אולי פשוט להריץ בדיקה על השדה name בלבד עם for, ואז לפי האינדקס לשייך לאובייקט שבמיקום זה במערך?
    מה הדרך, אם קיימת, לעשות זאת בקלות?
    (ייתכן שבכזה מערך קצר יחסית כבר עדיף לבדוק זאת ידנית, אבל מעניין אותי לדעת כזה דבר לפעמים אחרות... 🙂 )
    תודה!

    Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
    טיפים

    dovidD תגובה 1 תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      השיב לצדיק תמים ב נערך לאחרונה על ידי dovid
      #2

      @צדיק-תמים "חזרה של אותה אות", "ליד תווים קבועים" נלאיתי להבין. יש מצב שתביא דוגמה של הפלט הרצוי לקלט נתון?

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

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

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

        @dovid לכן הסברתי:

        לכאורה הדרך לעשות זאת זה על ידי חיפוש של האות הראשונה שאחרי כל name: '

        לזה התכוונתי אחרי תו קבוע. אבל אחרי זה חשבתי שזה מיותר -

        או אולי פשוט להריץ בדיקה על השדה name בלבד עם for, ואז לפי האינדקס לשייך לאובייקט שבמיקום זה במערך?

        @dovid אמר ברג'קס - זיהוי חזרה של אותה אות (ליד תוים קבועים) מעל/מתחת כמות חזרות מסוימת:

        יש מצב שתביא דוגמה של הפלט הרצוי לקלט נתון?

        לדוגמה אם אני רוצה לקבל את האותיות שפחות מ2 ערים מתחילות בהן, אז זה:ד, ז, ל, וכולי, שבכל אחת מהאותיות האלו יש רק עיר אחת ברשימה הזו

        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
        טיפים

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

          @צדיק-תמים מצד אחד לחפש כמה ערים מתחילים בג', וגם המילים for ואינדקס ומערך זה משימה של קוד זמן ריצה, מצד שני חיפוש אחרי הname: ' נשמע כמו חיפוש והחלפה בעורך קוד, אני מבולבל עמוקות. אני מקוה שאתה לא חושב שבאבייקט JS האות של מחרוזת "נמצאת ליד" התו האחרון של שם המאפיין שמחזיק אותה (name)!

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

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

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

            @dovid שאלתי על שתי הדרכים - האם נכון לעשות זאת ברג'קס, כשכוונתי בחיפוש לפי name היא אם עושים חיפוש בהתייחסות לאובייקט כמחרוזת טקסט ולא כאובייקט, או אולי בקוד זמן ריצה על ידי לולאה. כעת אני אוחז שזה לא הגיוני לעשות את זה ברג'קס, השאלה האם זה בכלל אפשרי ברג'קס? מקווה שכעת הייתי מספיק ברור, אם לא אני מתנצל מראש

            Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
            טיפים

            dovidD תגובה 1 תגובה אחרונה
            0
            • dovidD מחובר
              dovidD מחובר
              dovid ניהול
              השיב לצדיק תמים ב נערך לאחרונה על ידי
              #6

              @צדיק-תמים תבדוק מה מתאים לך:

              const lettersCount = cities.reduce((x, item) => {
                  x[item.name[0]] = (x[item.name[0]] || 0) + 1;
                  return x;
              }, {})
              

              או:

              const grouped = {}
              cities.forEach(x => {
                  grouped[x.name[0]] = grouped[x.name[0]] || [];
                  grouped[x.name[0]].push(x.name);
              });
              

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

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

              dovidD תגובה 1 תגובה אחרונה
              2
              • dovidD מחובר
                dovidD מחובר
                dovid ניהול
                השיב לdovid ב נערך לאחרונה על ידי dovid
                #7

                הפתרון שלי נקודתי מידי, כדאי לאמץ שימוש במתודה groupby מעיו זו (מקור) :

                function groupBy(list, keyGetter) {
                    const map = new Map();
                    for (const item of list) {
                        const key = keyGetter(item);
                        const collection = map.get(key);
                        if (!collection) 
                            map.set(key, [item]);
                        else 
                            collection.push(item);
                    }
                
                    return map;
                }
                

                ואז זה קוד יפה:

                const grouped = groupBy(cities, x=> x.name[0]);
                console.log(grouped.get('א'));
                
                

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

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

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

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

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

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