2012-02-14 22 views
5

के आधार पर ऑब्जेक्ट्स के नए सरणी में ऑब्जेक्ट्स का स्प्लिट सरणी मेरे पास objarray नामक ऑब्जेक्ट्स की एक सरणी है। प्रत्येक वस्तु इस तरह दिखता है:ऑब्जेक्ट की तारीख

var object = { 
    age: "45" 
    coords: "-37.807997 144.705784" 
    date: Sun Jul 28 2002 00:00:00 GMT+1000 (EST) 
} 

मैं तिथि के आधार पर एक नई सरणी में प्रत्येक वस्तु पुश करने के लिए की जरूरत है (तारीख एक दिनांक वस्तु है)।

var dateGroups = [[object, object, object],[object, object], [object, object, object]]; 

प्रत्येक सरणी भीतर dateGroups एक ही तिथि के साथ वस्तुओं में शामिल हैं: मैं अंतिम परिणाम इस तरह दिखना चाहते हैं।

क्या यह सरणी के साथ करना संभव है? इससे पहले मैं एक नई वस्तु है जो सभी objarray वस्तुओं की तारीख (तारीखों डेटा से उत्पन्न) के आधार पर वर्गीकृत निहित उत्पन्न:

var alldates = { 
    "1991" : [object, object, object], 
    "1992" : [object, object], 
    //etc... 
} 

ऊपर हालांकि व्यवहार में एक अजीब समाधान की तरह लगता है, मैं केवल करने में सक्षम होने की जरूरत है साल से वस्तुओं का उपयोग: पहले साल

मैं कैसे dateGroups सरणी की तरह कुछ में डेटा प्राप्त होगा से अर्थात् dateGroups [0] = ऑब्जेक्ट की श्रेणी? क्या इस प्रकार के डेटा को स्टोर करने का कोई बेहतर तरीका है?

+0

इसके लिए JSON चुनने के लिए बेहतर है। –

+0

किस प्रकार की JSON संरचना तिथि के अनुसार समूह के लिए उपयुक्त होगी? – tamarasaurus

उत्तर

7

Underscore.jsgroupBy फ़ंक्शन का उपयोग करने पर विचार करें, उसके बाद sortBy

groupByalldates की तरह एक संरचना का निर्माण होगा, यदि आप इसे इतना पसंद किया फोन:

var alldates = _.groupBy(objarray, function(obj) { 
    return obj.date.getFullYear(); 
}); 

sortBy बस प्रकार कुंजी के द्वारा किया जा सकता है, इस तरह:

var dateGroups = _.sortBy(alldates, function(v, k) { return k; }); 

तुम भी गठजोड़ कर सकते हैं इस तरह दो:

var dateGroups = _.chain(objarray) 
        .groupBy(function(obj) { return obj.date.getFullYear(); }) 
        .sortBy(function(v, k) { return k; }) 
        .value(); 

डी आपके उपयोग के मामले में इमेजिंग, मैं सरणी की सरणी, या सरणी के ऑब्जेक्ट मैप का उपयोग करने के कारण देख सकता हूं। यदि आप इंडेक्स पर देख रहे हैं, तो निश्चित रूप से बाद में उपयोग करें। एक बार जब आप एक संरचना है कि इस तरह दिखता है में दिनांक है

+0

यह शानदार ढंग से काम किया। धन्यवाद! मुझे निश्चित रूप से बाद में इंडेक्स का उपयोग करने की आवश्यकता होगी। – tamarasaurus

0

:

var alldates = { 
    "1991" : [object, object, object], 
    "1992" : [object, object], 
    //etc... 
} 

तुम बस उन्हें संरचना को बदलने के लिए इस कोड का उपयोग कर सकते हैं आप चाहते हैं:

var dateGroups = []; 

for(var year in allDates){ 
    dateGroups[dateGroups.length] = allDates[year]; 
} 
0

एक उत्तर को कम का उपयोग कर ।

var ans = objects.reduce(function(prev,curr) { 
    if (!prev[curr.date.getFullYear()]) prev[curr.date.getFullYear()] = []; 
    prev[curr.date.getFullYear()] = curr; 
    return prev; 
},[]).reduce(function(prev,curr) { 
    prev.push(curr); 
    return prev; 
},[]); 

पहले कम करने की दिनांक से वस्तुओं के समूहीकरण के लिए है, और दूसरा 0 से अलग वर्षों की संख्या को चलाने वालों की कुंजी बनाने के लिए है - के बजाय कुंजी साल में ही किया जा रहा है।

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