2011-06-02 12 views
6

Hay द्वारा ऑब्जेक्ट्स की जावास्क्रिप्ट सरणी सॉर्ट करें, मेरे पास ऑब्जेक्ट्स की एक सरणी है और मुझे प्रत्येक ऑब्जेक्ट की एक निश्चित संपत्ति द्वारा उन्हें (या तो डीईएससी या एएससी) सॉर्ट करने की आवश्यकता है।ऑब्जेक्ट प्रॉपर्टी

यहाँ डेटा

obj1 = new Object; 
obj1.date = 1307010000; 

obj2 = new Object; 
obj2.date = 1306923600; 

obj3 = new Object; 
obj3.date = 1298974800; 

obj4 = new Object; 
obj4.date = 1306923600; 

obj5 = new Object; 
obj5.date = 1307096400; 

data = [obj1,obj2,obj3,obj4,obj5]; 

है अब, मैं डेटा सरणी ऑर्डर करने के लिए इतना है कि वस्तुओं तिथि के अनुसार क्रम में हैं चाहता हूँ।

क्या कोई इस से मेरी सहायता कर सकता है?

उत्तर

32

उपयोग सरणी sort() विधि

data.sort(function(a, b){ 
    return a.date - b.date; 
}); 
4

इस प्रयास करें:

data.sort(function(a,b){ 
    return a.date - b.date; //to reverse b.date-a.date 
}); 
1

आप एक कस्टम प्रकार फ़ंक्शन का उपयोग कर सकते हैं:

function mySort(a,b) { 
    return (a.date - b.date); 
} 
data.sort(mySort); 
3

यह समाधान डेटा के किसी भी प्रकार के साथ काम करता है:

sort_array_by = function(field, reverse, pr){ 
    reverse = (reverse) ? -1 : 1; 
    return function(a,b){ 
    a = a[field]; 
    b = b[field]; 
    if (typeof(pr) != 'undefined'){ 
     a = pr(a); 
     b = pr(b); 
    } 
    if (a<b) return reverse * -1; 
    if (a>b) return reverse * 1; 
    return 0; 
    } 
} 

फिर, इसका उपयोग इस प्रकार (तरह रिवर्स):

data.sort(sort_array_by('date', true, function(a){ 
    return new Date(a); 
})); 

एक और उदाहरण के रूप में, आप प्रकार के "पूर्णांक" एक संपत्ति से यह सॉर्ट कर सकते हैं:

data.sort(sort_array_by('my_int_property', true, function(a){ 
    return parseInt(a); 
})); 
0

इस का एक उदाहरण है मैं कैसे आरोही क्रम यहाँ में ऑब्जेक्ट की श्रेणी छँटाई का उपयोग करें "सरणी" एक स्क्रिप्ट टैग में एक object.copy पेस्ट की सरणी और सांत्वना के माध्यम से कार्य प्रणाली को समझना है ...

function OBJECT(){ 
    this.PROPERTY1 =Math.floor(Math.random()*10+1) ; 


} 

OBJECT.prototype.getPROPERTY1=function(){ 
    return(this.PROPERTY1); 
} 
OBJECT.prototype.setPROPERTY1=function (PROPERTY){ 
    this.PROPERTY1=PROPERTY; 
} 

var array= new Array(); 
console.log("unsorted object") 
for(var a=0;a<10;a++) 
{ 
array.push(new OBJECT()); 
console.log(array[a].getPROPERTY1()) 
} 


function sorting() { 
    for(var i in array){ 
     array[i].setPROPERTY1((array[i].getPROPERTY1()*1)) 
      //that is just for sorting an integer value escape this line if not an          
      //integer property 
    } 

    var arr=new(Array); 
    var temp1=new(Array); 
    for(var i in array){ 
     temp1.push(array[i]); 
    } 
    var temporary=new(Array) 
    for(var i in array) 
    { 
     var temp = array[i].getPROPERTY1(); 
     arr.push(temp); 
    } 
    arr.sort(function(a,b){return a-b}); 
    //the argument above is very important 

    console.log(arr) 
    for(var i in arr){ 

     for(var j in temp1) 
      if(arr[i]==temp1[j].getPROPERTY1()) 
       break; 

     temporary.push(temp1[j]) 


     temp1.splice(j,1)//just this statement works for me 

    } 
    array.length=0; 
    for(var i in temporary) 
    { 
     array.push(temporary[i]) 
    } 



} 


    sorting(); 
     console.log("sorted object") 
for(var a=0;a<10;a++) 
{ 
      console.log(array[a].getPROPERTY1()) 
} 
0

मैं यह उत्तर जोड़ता हूं क्योंकि मुझे डुप्लिकेट चिह्नित करते समय इस धागे को संदर्भित किया जा रहा है और आजकल कुछ नए और क्लीनर समाधान उपलब्ध हैं।

एक और समाधान Lodash जैसे उपयोगिता लाइब्रेरी का उपयोग करना है और इसका Collection#sortBy फ़ंक्शन का उपयोग करना है। यह बहुत साफ कोड पैदा करता है और एक अधिक कार्यात्मक प्रोग्रामिंग शैली को बढ़ावा देता है, जिसके परिणामस्वरूप कम कीड़े होती हैं। एक झलक में यह स्पष्ट हो जाता है कि कोड क्या है।

var sortedObjs = _.sortBy(data, 'date'); 

और जानकारी:

ओपी के मुद्दे बस के रूप में हल किया जा सकता? जैसे हम नेस्टेड वस्तु निम्नलिखित है:

var users = [ 
  { 'user': {'name':'fred', 'age': 48}}, 
  { 'user': {'name':'barney', 'age': 36 }}, 
  { 'user': {'name':'fred'}}, 
  { 'user': {'name':'barney', 'age': 21}} 
]; 

अब हम संपत्ति है कि मिलान किया जाना चाहिए करने के लिए पथ निर्दिष्ट करने के लिए _.property आशुलिपि user.age उपयोग कर सकते हैं। हम उपयोगकर्ता वस्तुओं को नेस्टेड आयु संपत्ति द्वारा सॉर्ट करेंगे। हां, यह नेस्टेड संपत्ति मिलान के लिए अनुमति देता है!

var sortedObjs = _.sortBy(users, ['user.age']); 

इसे उलटना चाहते हैं? कोई बात नहीं। _.reverse का प्रयोग करें।

var sortedObjs = _.reverse(_.sortBy(users, ['user.age'])); 

इसके बजाय Chaining का उपयोग करके दोनों को जोड़ना चाहते हैं?

var sortedObjs = _.chain(users).sortBy('user.age').reverse().value(); 
संबंधित मुद्दे