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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
7 פוסטים 2 כותבים 121 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צדיק תמיםצ מנותק
    צדיק תמיםצ מנותק
    צדיק תמים
    כתב ב נערך לאחרונה על ידי צדיק תמים
    #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
    • צדיק תמיםצ צדיק תמים

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

      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, ואז לפי האינדקס לשייך לאובייקט שבמיקום זה במערך?
      מה הדרך, אם קיימת, לעשות זאת בקלות?
      (ייתכן שבכזה מערך קצר יחסית כבר עדיף לבדוק זאת ידנית, אבל מעניין אותי לדעת כזה דבר לפעמים אחרות... 🙂 )
      תודה!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            צדיק תמיםצ מנותק
            צדיק תמיםצ מנותק
            צדיק תמים
            כתב ב נערך לאחרונה על ידי צדיק תמים
            #5

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

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

            dovidD תגובה 1 תגובה אחרונה
            0
            • צדיק תמיםצ צדיק תמים

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

              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 dovid

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

                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);
                });
                
                dovidD מנותק
                dovidD מנותק
                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
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום