समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना आवश्यक है जो संख्याओं की एक सरणी लेता है, एआर, पहले और एकमात्र तर्क के रूप में।
सरणी गिरफ्तारी, कुछ डुप्लीकेट हो सकते हैं। हमारा कार्य सरणी को इस तरह से सॉर्ट करना है कि जो तत्व कम से कम संख्या में दिखाई देते हैं उन्हें पहले रखा जाता है और उसके बाद बढ़ती आवृत्ति में तत्व होते हैं।
यदि दो तत्व समान संख्या में सरणी में दिखाई देते हैं तो उन्हें बढ़ते क्रम में रखा जाना चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है
इनपुट
const arr = [5, 4, 5, 4, 2, 1, 12];
आउटपुट
const output = [1, 2, 12, 4, 4, 5, 5];
आउटपुट स्पष्टीकरण
संख्या 1, 2 और 12 सभी एक बार दिखाई देते हैं इसलिए बढ़ते क्रम में क्रमबद्ध होते हैं और फिर 4 और 5 दोनों दो बार दिखाई देते हैं।
उदाहरण
निम्नलिखित कोड है -
const arr = [5, 4, 5, 4, 2, 1, 12]; const sortByAppearance = (arr = []) => { arr.sort((a, b) => a - b); const res = []; const searched = {}; const countAppearance = (list, target) => { searched[target] = true; let count = 0; let index = list.indexOf(target); while(index !== -1){ count++; list.splice(index, 1); index = list.indexOf(target); }; return count; }; const map = []; arr.forEach(el => { if(!searched.hasOwnProperty(el)){ map.push([el, countAppearance(arr.slice(), el)]); }; }); map.sort((a, b) => a[1] - b[1]); map.forEach(([num, freq]) => { while(freq){ res.push(num); freq--; } }); return res; }; console.log(sortByAppearance(arr));
आउटपुट
[1, 2, 12, 4, 4, 5, 5]