मान लीजिए कि हमारे पास इस तरह के अल्फ़ान्यूमेरिक स्ट्रिंग्स की एक सरणी है -
const arr = ['A1', 'A10', 'A11', 'A12', 'A3A', 'A3B', 'A3', 'A4', 'B10', 'B2', 'F1', '1', '2', 'F3'];
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता है जो एक ऐसे सरणी में एक और एकमात्र तर्क के रूप में है।
और फंक्शन को इस ऐरे को इनप्लेस पर सॉर्ट करना चाहिए -
- जिन स्ट्रिंग्स में केवल संख्याएँ होती हैं, उन्हें पहले बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।
- अक्षरों और संख्याओं के संयोजन वाली स्ट्रिंग्स को पहले अक्षर के अनुसार और फिर संख्याओं के अनुसार बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए।
इसलिए, आउटपुट इस तरह दिखना चाहिए -
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' ]