2009-12-28 13 views
21

क्या क्रोम का उपयोग कर सरणी को सॉर्ट करने का कोई तरीका है?क्रोम के साथ जावास्क्रिप्ट ऐरे छंटनी?


प्रकार समारोह का उपयोग के रूप में इस उदाहरण में नहीं देखा काम करता है:

var myArray = [1,4,5,3,2]; 

myArray.sort (function(a , b){ 
    return b>a 
}); 

for (var i = 0; i < myArray.length; i++) 
{ 
    document.write(myArray[i]) 
} 

फ़ायरफ़ॉक्स/आईई/ओपेरा/Safri उत्पादन: 54321

क्रोम उत्पादन: 53241

jsBin example


आपके समय के लिए धन्यवाद!

उत्तर

30

यह मानक लगता है, एक नकारात्मक, सकारात्मक या शून्य संख्या लौटाता है।

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

http://www.w3schools.com/jsref/jsref_sort.asp

+0

एक ही समाधान "एमएम/डीडी/yyyy" –

13

क्रोम के व्यवहार सही है :)

ECMA मानकों की आवश्यकता समारोह सॉर्ट करने के लिए पारित किया जा रहा() बड़ी संख्या 0 से करने के लिए 0 से कम या बराबर वापस जाने के लिए, 0. हालांकि, आपके द्वारा परिभाषित किया गया फ़ंक्शन सत्य/गलत देता है। ईसीएमए मानकों का कहना है कि एक ऐसे कार्य के लिए जो अपेक्षित व्यवहार नहीं करता है, कार्यान्वयन ग्राहक पर निर्भर करता है।

Read this

3

मुझे लगता है, सही कारण यहाँ है: Sorting an array of objects in Chrome, और अधिक विशेष, this post

पोस्ट पढ़ने यदि आप अपने स्वयं सरणी छँटाई समारोह को लागू करने की जरूरत महसूस, तुम पर एक नज़र हो सकता है,: http://en.literateprograms.org/Merge_sort_%28JavaScript%29

+0

में सॉर्ट तिथि के समय काम नहीं कर रहा है, तो मैं यहां पार्टी के लिए थोड़ा देर हो चुकी हूं और अगर मुझे गलतफहमी है तो मुझे क्षमा करें लेकिन आपके द्वारा दिए गए लिंक की स्थिरता पर चर्चा कर रही है क्रोम का प्रकार जब कई तत्व एक ही रैंक पर मूल्यांकन करेंगे। लेकिन यह वही समस्या नहीं है जैसा कि यहां पूछे गए प्रश्न के मामले में, जहां प्रत्येक आइटम का एक अलग रैंक होता है। –

5
क्योंकि क्या ECMA स्टैंडर्ड तरह सरणियों के बारे में शामिल किया गया है की

(एक बहुत ही सरल तरीके से) :

  • यदि तुलना में 1 ए एक शर्त नीचे आती है।
  • यदि प्राप्त होता है -1 स्थिति को बनाए रखता है और बी
  • की ओर बेहतर रैंकिंग परिभाषित करता है तो 0 प्राप्त नहीं करता है।

सभी ब्राउज़र में समान व्यवहार की गारंटी करने के सबसे सुरक्षित तरीका है:

:

// descending order 
abc =[10,2,4,1]; 
abc.sort(function(a , b){ 
    return a > b ? -1 : 1; 
}); 

// ascending order 
abc.sort(function(a , b){ 
    return a > b ? 1 : -1; 
}); 

आदिम वस्तुओं के लिए की तरह वस्तुओं के लिए लघु संस्करण

// descending order 
abc.sort(function(a , b){ 
    return b - a; 
}); 

// ascending order 
abc.sort(function(a , b){ 
    return a - b; 
}); 

उपयोग करने के लिए posible है

var items = [ 
     { name: 'Edward', value: 21 }, 
     { name: 'Sharpe', value: 27 }, 
     { name: 'And', value: 31 }, 
     { name: 'The', value: -12 }, 
     { name: 'Zeros', value: 37 }, 
     { name: 'Magnetic', value: 37 } 

सही तरीका है:

items.sort(function(a , b){ 
    var result = a == b ? 0 : b > a ? -1 : 1 
    if(result === 0) 
    { 
    // implement a tight break evaluation 
    } 
    return result ; 
    }); 

यह सही तरीका है क्योंकि जिस तरह से ब्राउज़र पुनरावृत्त करता है उसे ईसीएमए मानक और ब्राउज़र में परिभाषित नहीं किया जाता है, अलग-अलग तरीकों से फिर से शुरू हो सकता है। उदाहरण के लिए अधिकांश ब्राउज़रों को ऊपर से नीचे तक चलाया जाता है, लेकिन क्रोम अंतिम के साथ पहला तत्व पुनरावृत्त करता है और रास्ते पर जाता है। तो कड़े होने के मामले में अधिकांश ब्राउज़रों के अलग-अलग परिणाम हो सकते हैं।

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