המרת קלט מורכב מהמשתמש למערך, 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.
זה כבר מסובך לגמרי...לא הבנתי את השלב הנוסף של הקושי
-
@yossiz אמר בהמרת קלט מורכב מהמשתמש למערך, JS:
לא הבנתי את השלב הנוסף של הקושי
בדיוק כמו שכתבתי, אני צריך אופציה של "01" ו "001", וכן "0000".
-
לא כתבת ברור אם הקוד אמור לזהות את הפורמט או שמישהו יזין את הפורמט לקוד והקוד רק חייב לפרמט אותו.
האם צריך לפרמט כל חלק בפני עצמו? או שמספיק לזהות מהמספר הראשון את הפורמט של האחרים? (זה מספיק רק בהנחה שהם ממויינים ממטה למעלה)
(בתמונה יש תערובות של פורמטים בקלט) -
@www אמר בהמרת קלט מורכב מהמשתמש למערך, JS:
מה הבעיה בפלט, זה בדיוק מה שרצית, לא?
משאלת @yossiz אני מבין שרצונך לפרמט גם את הפלט עם אפסים מובילים (לפי הקלט) -
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 הרבה יותר מובן וקריא.
5/12