मान लीजिए हमारे पास अल्फान्यूमेरिक स्ट्रिंग्स की एक सरणी है जैसे -
const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
हमें एक JavaScript फ़ंक्शन लिखना है जो ऐसी एक सरणी को एकमात्र तर्क के रूप में लेता है।
और फ़ंक्शन को इस सरणी को इनप्लेस सॉर्ट करना चाहिए -
- केवल संख्याओं वाली स्ट्रिंग्स पहले आनी चाहिए बढ़ते क्रम में सॉर्ट की हुई।
- अल्फाबेट और संख्याओं के संयोजन वाली स्ट्रिंग्स को पहले अल्फाबेट के अनुसार और फिर संख्याओं के अनुसार बढ़ते क्रम में सॉर्ट किया जाना चाहिए।
इसलिए, आउटपुट इस तरह दिखना चाहिए -
const output = ['1', '2', 'A1', 'A2', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3'];
उदाहरण
const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3']; const alphaNumericSort = (arr = []) => { const sorter = (a, b) => { const isNumber = (v) => (+v).toString() === v; const aPart = a.match(/\d+|\D+/g); const bPart = b.match(/\d+|\D+/g); let i = 0; let len = Math.min(aPart.length, bPart.length); while (i < len && aPart[i] === bPart[i]) { i++; }; if (i === len) { return aPart.length - bPart.length; }; if (isNumber(aPart[i]) && isNumber(bPart[i])) { return aPart[i] - bPart[i]; }; return aPart[i].localeCompare(bPart[i]); }; arr.sort(sorter); }; alphaNumericSort(arr); console.log(arr);आउटपुट
कंसोल में आउटपुट होगा -
[ '1', '2', 'A1', 'A3', 'A3A', 'A3B', 'A4', 'A10', 'A11', 'A12', 'B2', 'B10', 'F1', 'F3' ]