प्राकृतिक सारणी तत्व सॉर्टिंग: संख्याओं के साथ स्ट्रिंग्स
यह आलेख उन तत्वों वाले सरणी को सॉर्ट करने के कार्य पर चर्चा करता है जो स्ट्रिंग्स और संख्याओं को जोड़ते हैं प्राकृतिक क्रम, जहां छँटाई प्रक्रिया में स्ट्रिंग के भीतर संख्यात्मक अनुक्रमों पर विचार किया जाना चाहिए।
समस्या
इस तरह एक सरणी पर विचार करें:
["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob says hello"]
यदि हम पारंपरिक सॉर्ट फ़ंक्शन का उपयोग करके इस सरणी को सॉर्ट करने का प्रयास करते हैं, तो हम गलत क्रम में पहुंच सकते हैं:
["IL0 Foo", "IL10 Baz", "IL3 Bob says hello", "PI0 Bar"]
समाधान: प्राकृतिक छँटाई
प्राकृतिक छँटाई प्राप्त करने के लिए, हम निम्नलिखित जावास्क्रिप्ट फ़ंक्शन का लाभ उठा सकते हैं:
function naturalCompare(a, b) { var ax = [], bx = []; a.replace(/(\d )|(\D )/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) }); b.replace(/(\d )|(\D )/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) }); while(ax.length && bx.length) { var an = ax.shift(); var bn = bx.shift(); var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]); if(nn) return nn; } return ax.length - bx.length; }
यह फ़ंक्शन इनपुट स्ट्रिंग्स को संख्यात्मक और गैर-संख्यात्मक मानों के सरणियों में टोकनाइज़ करता है। इसके बाद यह संख्यात्मक मानों को पूर्णांक के रूप में और गैर-संख्यात्मक मानों को स्ट्रिंग के रूप में ध्यान में रखते हुए, शब्दकोषीय रूप से सरणियों की तुलना करता है।
उदाहरण
इस फ़ंक्शन को दिए गए सरणी पर लागू करना वांछित प्राकृतिक छँटाई क्रम में परिणाम:
test = [ "img12.png", "img10.png", "img2.png", "img1.png", "img101.png", "img101a.png", "abc10.jpg", "abc10", "abc2.jpg", "20.jpg", "20", "abc", "abc2", "" ]; test.sort(naturalCompare) document.write("<pre>" JSON.stringify(test,0,3));
यह निम्नलिखित क्रमबद्ध सरणी उत्पन्न करता है:
[ "", "abc", "abc2", "abc10", "abc10.jpg", "20", "20.jpg", "img1.png", "img2.png", "img10.png", "img12.png", "img101.png", "img101a.png" ]
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3