2016-08-29 14 views
5

मैं समझने की कोशिश कर रहा हूं कि वास्तव में कैसे क्रमबद्ध() काम करता है और मुझे इसका उपयोग कैसे करना है।सॉर्ट(), सॉर्ट (फ़ंक्शन (ए, बी) {रिटर्न ए-बी;}) के बीच अंतर; और क्रमबद्ध करें (फ़ंक्शन (ए, बी) {...})

मैंने कुछ शोध किया (google) और स्टैक ओवरफ्लो पर इसी तरह के प्रश्नों के माध्यम से चला गया, लेकिन अभी भी कुछ चीजें हैं जो मुझे 100% स्पष्ट नहीं हैं।

तो मेरी समझ अब तक है निम्नलिखित:

हैं: प्रकार स्ट्रिंग का ही सरल सरणियों मूल्यों वर्णानुक्रम और आरोही क्रम में:

प्रकार (पैरामीटर के बिना)

ईजी

// sort alphabetically and ascending: 
var myArr=["Bob", "Bully", "Amy"] 
myArr.sort() // Array now becomes ["Amy", "Bob", "Bully"] 


तरह() एक पैरामीटर के रूप में एक समारोह के साथ: अपने गुणों के अनुसार सरणियों में वस्तुओं सॉर्ट करता; आइटम, तथापि, एक पैरामीटर के रूप में एक समारोह के साथ संख्या

myArr.sort(function(a,b) { 
    return a - b; 
}); 


तरह() के रूप में तुलना की जाती है: उनके गुणों के अनुसार सरणियों में वस्तुओं सॉर्ट करता; आइटम संख्या या स्ट्रिंग्स

myArr.sort(function(a, b) { 
    if (a.sortnumber < b.sortnumber) return -1; 
    else if (a.sortnumber > b.sortnumber) return 1; 
    return 0; 
}); 


मैं सभी इन 3 प्रकार() कार्यों के साथ निम्नलिखित सरणी छँटाई करने की कोशिश की जा सकती है।

var myArr = [{ 
 
    "sortnumber": 9, 
 
    "name": "Bob" 
 
}, 
 
{ 
 
    "sortnumber": 5, 
 
    "name": "Alice" 
 
}, 
 
{ 
 
    "sortnumber": 4, 
 
    "name": "John" 
 
}, 
 
{ 
 
    "sortnumber": 3, 
 
    "name": "James" 
 
}, 
 
{ 
 
    "sortnumber": 7, 
 
    "name": "Peter" 
 
}, 
 
{ 
 
    "sortnumber": 6, 
 
    "name": "Doug" 
 
}, 
 
{ 
 
    "sortnumber": 2, 
 
    "name": "Stacey" 
 
}]; 
 

 
//myArr.sort(); // doesn't do anything since it doesn't know on what property to sort 
 

 
/* 
 
myArr.sort(function(a, b) { 
 
    return (a.sortnumber - b.sortnumber); // sorts array 
 
    return (a.name - b.name); // doesn't sort array 
 
}); 
 
*/ 
 

 
/* 
 
// sorts array even when I use name as property to sort on 
 
myArr.sort(function(a, b) { 
 
    if (a.sortnumber < b.sortnumber) return -1; 
 
    else if (a.sortnumber > b.sortnumber) return 1; 
 
    return 0; 
 
}); 
 
*/ 
 

 

 
console.log(myArr);

Here भी एक बेला है।

तो, मेरे सवाल कर रहे हैं:

  1. मेरी समझ सही है?
  2. क्या कोई ऐसी चीज है जो मुझे याद आ रही है?
  3. यदि तीसरा मामला हर समय काम करता है, तो क्या मैं हमेशा इसके साथ रह सकता हूं या अन्य दो मामलों में किसी भी तरह से अधिक कुशल है या तीसरे मामले के लिए कोई फायदे हैं?

यदि कोई उपरोक्त पर विस्तृत कर सकता है तो मैं वास्तव में इसकी सराहना करता हूं। धन्यवाद।

+0

यदि आप पुराने आईई ब्राउज़र का समर्थन करने की आवश्यकता है, तो पहले या तीसरे दृष्टिकोण का उपयोग करें। – Maris

+0

_ क्या वहां कुछ भी है जो मुझे याद आ रही है? _ ऐसे प्रश्न ऑफ-विषय हैं। यहां हम केवल ** विशिष्ट ** समस्याओं से निपटते हैं। – hindmost

+1

@ हिंडोस्ट: क्या कोई विशिष्ट बात है कि मैं निर्दिष्ट विषय में अनुपलब्ध हूं, यह सवाल है कि प्रश्न कैसे पढ़ा जाना है। – Setily

उत्तर

3

ठीक है, तो कुछ अतिरिक्त अनुसंधान के बाद, MDN documentation माध्यम से जा रहा है, और arraysort और arraysort2 लिंक है, जो मैं बहुत उपयोगी पाया, मैं एक स्लाइड कि शायद करने के लिए काम का हो सकता है बनाया कोई और, इसलिए मैं इसे यहां पोस्ट कर रहा हूं। आपके जवाबों के लिए आप सभी का धन्यवाद!

enter image description here

2

सबसे पहले, आप एक अच्छे शोध किया और लगभग सभी संभव मामलों को कवर किया है, और आप MDN दस्तावेजीकरण here

तुम बस गैर- ASCII वर्ण छंटाई के मामले याद पा सकते हैं

गैर-ASCII वर्णों के साथ स्ट्रिंग को सॉर्ट करने के लिए, यानी उच्चारण वाले अक्षरों (ई, é, è, a, ä, आदि) के साथ तार, अंग्रेजी के अलावा अन्य भाषाओं से तार: String.localeCompare का उपयोग करें। यह फ़ंक्शन उन वर्णों की तुलना कर सकता है ताकि वे सही क्रम में दिखाई दें।

var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu']; 
items.sort(function (a, b) { 
    return a.localeCompare(b); 
}); 

// items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé'] 
1

सरणी संदर्भ (http://www.w3schools.com/jsref/jsref_sort.asp) के अनुसार:

By default, the sort() method sorts the values as strings in alphabetical and ascending order.

तो अपने पहले समझ के बारे में sort() सही है। हालांकि, दूसरा और तीसरा अभी तक सही नहीं है। सबसे पहले, वे दोनों एक ही मामले हैं, जो sort() विधि में एक सॉर्टिंग फ़ंक्शन प्रदान कर रहा है। इस विधि को a और b की तुलना करनी चाहिए, और नकारात्मक, शून्य, या सकारात्मक मानों को वापस करना चाहिए, यह दर्शाता है कि ab से कम, बराबर या उससे अधिक है। उदाहरण के लिए, आप अभी भी अपने myArr इस तरह name संपत्ति का उपयोग कर की तुलना कर सकते हैं:

myArr.sort(function(a,b) { 
    return a.name.localeCompare(b.name); 
}); 
1

मुझे लगता है, आप संख्या से इस उदाहरण जो प्रकार नाम Forst द्वारा तरह, तरह मापदंड गठबंधन और उसके बाद करना चाहते हैं। कृपया 'John' देखें।

var myArr = [{ "sortnumber": 9, "name": "Bob" }, { "sortnumber": 5, "name": "Alice" }, { "sortnumber": 4, "name": "John" }, { "sortnumber": 3, "name": "James" }, { "sortnumber": 7, "name": "Peter" }, { "sortnumber": 6, "name": "Doug" }, { "sortnumber": 2, "name": "Stacey" }, { "sortnumber": 14, "name": "John" }, { "sortnumber": 12, "name": "John" }]; 
 

 
myArr.sort(function (a, b) { 
 
    return a.name.localeCompare(b.name) || a.sortnumber - b.sortnumber; 
 
}); 
 

 
console.log(myArr);

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