2013-01-24 15 views
9

मेरे पास एक कस्टम फ़ंक्शन को सॉर्ट करने के लिए ऑब्जेक्ट्स की एक सरणी है, क्योंकि मैं कई ऑब्जेक्ट विशेषताओं पर इसे कई बार करना चाहता हूं, मैं कस्टम सॉर्ट फ़ंक्शन में डाइनैमिक रूप से विशेषता के लिए मुख्य नाम पास करना चाहता हूं:जेएस सॉर्ट() कस्टम फ़ंक्शन मैं और पैरामीटर कैसे पास कर सकता हूं?

function compareOnKey(key, a, b) { 
    a = parseInt(a[key]) 
    b = parseInt(b[key]) 
    if (a < b) return -1 
    if (a > b) return 1 
     return 0 
} 
arrayOfObjects.sort(compareOn('myKey')) 

यह एक सुविधाजनक तरीके से किया जा सकता है:

function compareOnOneFixedKey(a, b) { 
    a = parseInt(a.oneFixedKey) 
    b = parseInt(b.oneFixedKey) 
    if (a < b) return -1 
    if (a > b) return 1 
     return 0 
} 

arrayOfObjects.sort(compareByThisKey) 

की तरह कुछ बन जाना चाहिए? धन्यवाद।

उत्तर

9

में पारित किया गया है, आपको partially apply फ़ंक्शन, उदाहरण के लिए bind का उपयोग कर:

arrayOfObjects.sort(compareOn.bind(null, 'myKey')); 

या फिर आप compareOn वापसी वास्तविक प्रकार समारोह, बाहरी समारोह के तर्कों (के रूप में दूसरों के द्वारा प्रदर्शन किया) के साथ parametrized बनाते हैं।

+0

+1 मैं पूरी तरह से विचार करने में असफल रहा। –

+0

विधि के अलावा यह अच्छा है कि इसमें अभी भी संगतता समस्याएं हैं। – VisioN

+1

@VisioN: ... लेकिन बहुत सी चीजों को आसान बनाता है :-) पुराने आईईएस का समर्थन करने वाले किसी भी व्यक्ति के लिए, लिंक किए गए एमडीएन पेज में एक शिम – Bergi

9

आप एक आवरण जोड़ सकते हैं:

function compareOnKey(key) { 
    return function(a, b) { 
     a = parseInt(a[key], 10); 
     b = parseInt(b[key], 10); 
     if (a < b) return -1; 
     if (a > b) return 1; 
     return 0; 
    }; 
} 

arrayOfObjects.sort(compareOnKey("myKey")); 
4

हाँ, है तुलनित्र एक जनरेटर है जो एक परम जो कुंजी है लेता से लौटे आप

function compareByProperty(key) { 
    return function (a, b) { 
     a = parseInt(a[key], 10); 
     b = parseInt(b[key], 10); 
     if (a < b) return -1; 
     if (a > b) return 1; 
     return 0; 
    }; 
} 
arrayOfObjects.sort(compareByProperty('myKey')); 

compareByProperty('myKey') रिटर्न करने के लिए समारोह चाहते हैं तुलना करना, जिसे .sort

+0

अच्छी तरह से काम कर रहा है, लेकिन इसकी लचीलापन के लिए .bind() तरीका चुनें। पैरासेन्ट में बेस 10 के साथ मेरे कोड को दोबारा भेजने के लिए धन्यवाद :) विधि के लिए –

संबंधित मुद्दे

 संबंधित मुद्दे