जाहिर है आप इस करना चाहिए नहीं, के रूप में यह कहीं अधिक समझ में आता है सॉर्ट करने के लिए, तो परिणाम रिवर्स, लेकिन अगर आप वास्तव में तरह समारोह के अंदर उलटे क्रम में क्रमबद्ध करना चाहते हैं, तो आप इस तरह कुछ कर सकता है। ..
_.sortBy(["Bob", "Mary", "Alice"], function (a) {
// split each string into single characters
// ... then swap for inverse character from unicode range
// ... and glue the characters back together into an inversely sortable string
return _.map(a.split(''), function(i){
return String.fromCharCode(65536 - i.charCodeAt(0));
}).join('');
});
... यह भी कहा कि अंडरस्कोर ध्यान देने योग्य प्रकार देशी जावास्क्रिप्ट जो लगातार सॉर्ट क्रम के बारे में एक छोटा सा क्रॉस प्लेटफॉर्म मुद्दा है की तुलना में आसानी से अलग है ...
तो compareFunction (ए, बी) 0 देता है, एक दूसरे को एक दूसरे के संबंध में अपरिवर्तित छोड़ देता है, लेकिन सभी अलग-अलग तत्वों के संबंध में हल किया जाता है। नोट: ईसीएमएस्क्रिप्ट मानक इस व्यवहार की गारंटी नहीं देता है, और इस प्रकार सभी ब्राउज़रों (उदा। कम से कम 2003 तक मोज़िला संस्करण) इस बात का सम्मान नहीं करते हैं। Array.prototype.sort()
अंडरस्कोर के .sortBy
प्रलेखन राज्यों:
लौटाता है (स्थिरतापूर्वक) सूची की प्रतिलिपि अनुसार क्रमबद्ध। _.sortBy
कौन सा यह 0
लौटने के क्रम में आइटम रखने के लिए के बजाय द्वारा होता है, यह बाईं ओर के सूचकांक शून्य से दाईं ओर के सूचकांक देता है।
_.sortBy = function(obj, iteratee, context) {
iteratee = cb(iteratee, context);
return _.pluck(_.map(obj, function(value, index, list) {
return {
value: value,
index: index,
criteria: iteratee(value, index, list)
};
}).sort(function(left, right) {
var a = left.criteria;
var b = right.criteria;
if (a !== b) {
if (a > b || a === void 0) return 1;
if (a < b || b === void 0) return -1;
}
return left.index - right.index;
}), 'value');
};
आपको एहसास है कि आखिरकार यह सरणी को सामान्य रूप से सॉर्ट करने के लिए तेज़ी से हो सकता है, और फिर 'रिवर्स() 'कॉल करें? –
छंटनी और फिर उलटना अन्य विकल्पों की तुलना में बहुत अधिक पठनीय होगा। –