समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो संख्याओं की एक सरणी arr को एकमात्र आर्गुमेंट के रूप में लेता है। सरणी arr में डुप्लिकेट हो सकते हैं। हमारा फ़ंक्शन सरणी को इस तरह सॉर्ट करना चाहिए कि कम बार आने वाले तत्व पहले आएं, फिर बढ़ती आवृत्ति के क्रम में। यदि दो तत्व समान बार आते हैं, तो उन्हें बढ़ते क्रम में रखा जाए।
उदाहरण के लिए, यदि इनपुट है:
इनपुट
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]