המרת קלט מורכב מהמשתמש למערך, JS
-
אני רוצה לייצר מערך ב JS מקלט של המשתמש, בדומה לבחירת עמודים להדפסה.
לדוגמה:
2,6,7-9 ייתן את התוצאה מערך של: 2 6 7 8 9.בנוסף אני צריך שזה יהיה גם טקסט, לא רק במערך, אלא גם בקלט, לדוגמה:
01,03,06-12 ייתן את התוצאה: 01 03 06 07 08 09 10 11 12.
זה כבר מסובך לגמרי...איך אני עושה דבר כזה??
-
@www
https://github.com/euank/node-parse-numeric-range@www אמר בהמרת קלט מורכב מהמשתמש למערך, JS:
בנוסף אני צריך שזה יהיה גם טקסט, לא רק במערך, אלא גם בקלט, לדוגמה:
01,03,06-12 ייתן את התוצאה: 01 03 06 07 08 09 10 11 12.
זה כבר מסובך לגמרי...לא הבנתי את השלב הנוסף של הקושי
-
לא כתבת ברור אם הקוד אמור לזהות את הפורמט או שמישהו יזין את הפורמט לקוד והקוד רק חייב לפרמט אותו.
האם צריך לפרמט כל חלק בפני עצמו? או שמספיק לזהות מהמספר הראשון את הפורמט של האחרים? (זה מספיק רק בהנחה שהם ממויינים ממטה למעלה)
(בתמונה יש תערובות של פורמטים בקלט) -
function range(input){ var result = []; var items = input.split(','); for(var item of items){ var ranges = item.split('-'); if(ranges.length == 1) result.push(item); else{ var start = +ranges[0]; var end = +ranges[1]; var needPad = ranges[0][0] == '0'; for(let i = start; i <= end; i++) result.push(needPad ? i.toString().padStart(ranges[1].length, '0') : i); } } return result; }
range("01,03,06-12,25-30")
["01", "03", "06", "07", "08", "09", "10", "11", "12", "25", "26", "27", "28", "29", "30"]
-
@dovid שתי הערות/שיפורים קטנים:
שורה 3var items = input.split(',').map(s => s.trim());
וכנ"ל שורה 5:
var ranges = item.split('-').map(s => s.trim());
שורה 14:
result.push(needPad ? i.toString().padStart(ranges[1].length, '0') : i.toString());
וכמובן צריך לטפל במצבים של קלט לא תקין...
-
@WWW אם עוד לא הסתכלת... הקוד של הספרייה שהבאתי הוא פחות או יותר שווה לקוד של @dovid חוץ מכמה פיצ'רים שאתה לא צריך מן הסתם:
- כמה תווים לציין טווח:
-
...
..
‥
…
- התעלמות מערכים לא מספריים (זה יכול להיות טוב או לא טוב, תלוי בצרכים)
- אפשרות לטווחים "הפוכים" (10-1 במקום 1-10)
- אפשרות למספרים שליליים (הקוד של דוד כמעט תומך בזה)
- כמה תווים לציין טווח:
-
@yossiz אמר בהמרת קלט מורכב מהמשתמש למערך, JS:
לא כתבת ברור אם הקוד אמור לזהות את הפורמט או שמישהו יזין את הפורמט לקוד והקוד רק חייב לפרמט אותו.
האם צריך לפרמט כל חלק בפני עצמו? או שמספיק לזהות מהמספר הראשון את הפורמט של האחרים? (זה מספיק רק בהנחה שהם ממויינים ממטה למעלה)
(בתמונה יש תערובות של פורמטים בקלט)אני רוצה שאם יקלידו: "08-11" יתקבל מערך עם סטרינגים "08" "09" וכו' "11".
ואם יקלידו 1-3, יתקבל מערך עם סטרינגים "1" "2" "3".
ואם יקלידו "001-003" יתקבל סטרינגים "001" "002" "003".עכשיו אני בודק אם הקוד של @dovid עונה על הציפיות!
-
@yossiz אמר בהמרת קלט מורכב מהמשתמש למערך, JS:
@WWW אם עוד לא הסתכלת... הקוד של הספרייה שהבאתי הוא פחות או יותר שווה לקוד של @dovid חוץ מכמה פיצ'רים שאתה לא צריך מן הסתם:
הקוד של הספרייה שלך כבר עבד לי מצוין אתמול, אבל רק עם 1 2 3 וכמובן לא עם 01 02 03.
הקוד של @dovid הרבה יותר מובן וקריא.