javascript - Easiest way to derive subset array of highest 10 values? -


जावास्क्रिप्ट में मेरे पास एक सरणी है:

  var foo = [2, 2 , 4, 4, 128, 2, 2, 1, 4, 18, 27, 16, 2, 1, 18, 21, 5, 1, 128, 1, 2, 2, 1, 18, 12, 60, 2 , 28, 1, 17, 2, 3, 4, 2, 2, 2, 1, 27, 2, 17, 7, 2, 2, 2, 5, 1, 2, 4, 7, 1, 2, 1 , 1, 1, 2, 1, 5, 7, 2, 7, 6, 1, 7, 1, 5, 8, 4];  

और मैं सर्वोच्च 10 मानों की एक सबसेट सरणी को प्राप्त करने के लिए एक रास्ता खोजने में दिलचस्पी लेता हूं (एक पाश के भीतर, एकाधिक नहीं), जहां मूल्य की पिछली स्थिति 'कुंजी' है (जैसे मानचित्र वस्तु का अनुकरण):

उदाहरण:

  var fooTopTen = [[4, 128], [18, 128], [25, 60], [ 27, 28], [10, 27], [37, 27], [15, 21], [9, 18], [14, 18], [23, 18]]; मेरे पिछले उत्तर में एक रिवर्स इंडेक्स टेबल है, लेकिन इसमें कुछ बग्स हैं - जो अब हैं निश्चित - और निम्नलिखित कोड की तुलना में समझना कठिन था।  

यह वास्तव में उत्तर में दिए गए सभी समाधानों की सबसे धीमी है - अधिकतम प्रदर्शन के लिए, मेरे दूसरे उत्तर की जांच करें।

  फेर फू = [2, 2, 4, 4, 128, 2, 2, 1, 4, 18, 27, 16, 2, 1, 18, 21, 5, 1, 128, 1, 2, 2, 1 , 18, 12, 60, 2, 28, 1, 17, 2, 3, 4, 2, 2, 2, 1, 27, 2, 17, 7, 2, 2, 2, 5, 1, 2, 4 , 7, 1, 2, 1, 1, 1, 2, 1, 5, 7, 2, 7, 6, 1, 7, 1, 5, 8, 4]; Var fooTopTen = []; // वैल्यू के लिए इंडेक्स में जोड़ें (var i = 0, len = foo.length; i & lt; len; ++ i) fooTopTen.push ([i, foo [i]]); // मूल्य (अवरोही क्रम) से पहले सॉर्ट करें, फिर इंडेक्स द्वारा (चढ़ते क्रम) fooTopTen.sort (फ़ंक्शन (टी 1, टी 2) {रिटर्न टी 2 [1] - टी 1 [1] || टी 1 [0] - टी 2 [0] ;}); // आकार fooTopTen.length = 10 को सही करने के लिए छोटा करें; // आउटपुट शीर्ष दस, परिणाम दस्तावेज की जांच करने के लिए। Writeln ('[[' fooTopTen.join ('', ['] +']] ');  

तुलना फ़ंक्शन के दूसरे भाग (सूचकांक की तुलना करने वाली कोई) की आवश्यकता नहीं है, क्योंकि सॉर्ट () अधिकांश लागूकरण में स्थिर है (यह नहीं है ईसीएमए द्वारा आवश्यक)। मैं इसे एक उदाहरण के रूप में छोड़ दूँगा कि कैसे कई आवश्यकताओं के साथ सॉर्ट किया जा सकता है ...


Comments