2012-06-19 23 views
17

द्वारा JSON सारणी छँटाई की जेनेरिक तरह से मुझे पता चला कैसे http://www.devcurry.com/2010/05/sorting-json-array.htmlविशेषता

पर एक JSON सारणी सुलझाने के लिए अब मैं एक सामान्य तरीके से सुलझाने के लिए चाहते हैं; ताकि मेरा सॉर्टिंग फ़ंक्शन जानता हो कि किस विशेषता को सॉर्ट करना है।

उदाहरण के लिए

अगर मेरे सरणी

[ 
    { 
    "name": "John", 
    "age": "16" 
    }, 
    { 
    "name": "Charles", 
    "age": "26" 
    } 
] 

मैं अगर मामलों अगर मैं नाम या उम्र के आधार पर सॉर्ट करना चाहिए पता करने के लिए विभिन्न लेखन से बचने के लिए चाहते हैं। मैं बस पैरामीटर 'नाम' या 'आयु' पास करना चाहता हूं और मेरे सॉर्टिंग फ़ंक्शन को पता होना चाहिए कि क्या करना है।

धन्यवाद।

+0

तो क्या आपने कुछ भी करने की कोशिश की है? आपके द्वारा लिंक किया गया लेख और आप वास्तव में क्या करना चाहते हैं, जेएसओएन के साथ कुछ भी नहीं करना है; आप नियमित जावास्क्रिप्ट डेटा संरचनाओं में हेरफेर कर रहे हैं, जबकि [JSON] (http://json.org) ऐसी संरचनाओं का एक स्ट्रिंग क्रमबद्धरण है। – lanzz

+1

आप सही हैं। मैंने सवाल को सही तरीके से तैयार नहीं किया। – userPassingBy

उत्तर

64

कुछ एक जैसे:

function predicateBy(prop){ 
    return function(a,b){ 
     if(a[prop] > b[prop]){ 
      return 1; 
     }else if(a[prop] < b[prop]){ 
      return -1; 
     } 
     return 0; 
    } 
} 

//Usage 
yourArray.sort(predicateBy("age")); 
yourArray.sort(predicateBy("name")); 
+0

बहुत बहुत धन्यवाद! :) – userPassingBy

+0

@Engineer: क्या यह करी है? अच्छा है हालांकि + 1 – Anand

+0

अच्छा है। demysitfied :) – 1Mayur

4

इस उदाहरण देखें http://jsfiddle.net/W8Byu/1/

क्या मैंने किया है एक चर में संग्रहीत प्रकार स्तंभ नाम और क्रमबद्ध समारोह में प्रयोग किया जाता है।

var sortColumnName = "Name"; 

function SortByName(x,y) { 
     return ((x[sortColumnName] == y[sortColumnName]) ? 0 : ((x[sortColumnName]> y[sortColumnName]) ? 1 : -1)); 
    } 
+0

आपके उत्तर के लिए धन्यवाद। – userPassingBy

4

आप Alasql पुस्तकालय के साथ किसी भी क्षेत्र से सरणियों सॉर्ट कर सकते हैं:

var data = [{"name":"John", "age":"16"}, {"name":"Charles", "age":"26"}]; 

var res1 = alasql('SELECT * FROM ? ORDER BY name',[data]); 
var res2 = alasql('SELECT * FROM ? ORDER BY age',[data]); 
var res3 = alasql('SELECT * FROM ? ORDER BY age, name',[data]); 
var res4 = alasql('SELECT * FROM ? ORDER BY age DESC, name ASC',[data]); 

इस उदाहरण in jsFiddle की कोशिश करो।

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