2011-02-01 13 views
12

मुझे मानचित्र ऑब्जेक्ट में कुछ जेसन डेटा मिला है जो समय के अनुसार क्रमबद्ध है। कुंजी एक पूर्णांक आईडी है और मान एक ऑब्जेक्ट है जिसमें टाइमस्टैम्प होता है। हालांकि जब मैं jQuery $ .each फ़ंक्शन के साथ इस डेटा पर पुन: प्रयास करने का प्रयास करता हूं, तो परिणाम इसके बजाय कुंजी द्वारा क्रमबद्ध होते हैं। मैं ऑब्जेक्ट्स के अपने संग्रह में अपने मूल क्रम में कैसे पुन: प्रयास कर सकता हूं?मूल क्रम में jQuery JSON ऑब्जेक्ट पर इटरेट

कोड उदाहरण:

$.getJSON(url, addPages); 
function addPages(pageData) { 
    $.each(pageData, function(key,value){ 
     alert(key+' : '+value); 
    } 
} 

उत्तर

6

आप वस्तुओं की एक सरणी में कुंजी मान जोड़े नकल कर सकता है: अगर आप दोनों गैर-संख्यात्मक कुंजी और एक निश्चित क्रम के साथ कुछ चाहिए, सबसे आसान तरीका है [कुंजी, मूल्य] सूचियों की सूची का उपयोग किया जाएगा और उसके बाद उन्हें क्रम में रखने के लिए Array.sort का उपयोग करें।

// $.getJSON(url, addPages); //removed for test purposes 
function addPages(pageData) { 
    var pageItems = []; 
    $.each(pageData, function(key,value){ 
     pageItems.push({ key: key, value: value }); 
    }); 
    // Assuming you can do arithmetic on timestamps 
    pageItems.sort(function(a,b){ return a.value.timeStamp - b.value.timeStamp; }); 
    $.each(pageItems, function(index,pageItem){ 
     alert(pageItem.key+' : '+pageItem.value.timeStamp); 
    }); 
} 

मेरे परीक्षण स्क्रिप्ट:

var testData = { 
    '12': { timeStamp: 55 }, 
    '16': { timeStamp: 655 }, 
    '123': { timeStamp: 455 }, 
    '312': { timeStamp: 955 }, 
    '132': { timeStamp: 255 }, 
    '126': { timeStamp: 455 }, 
    '162': { timeStamp: 355 } 
    }; 
addPages(testData); 
+0

मैं वास्तव में क्या आप पोस्ट की तरह कुछ के साथ चला गया है, लेकिन अपने टुकड़ा btw वाक्यविन्यास त्रुटियों से भरा है। – Doug

+0

वाक्यविन्यास त्रुटियों के बारे में क्षमा करें - मैंने इसे अभी ठीक कर दिया है। (मैं देर रात को दोषी ठहरा रहा हूं और रुबी के हालिया संपर्क में हूं) –

11

वस्तुओं अन-आदेश दिया सेट कर रहे हैं। आप क्रॉस-ब्राउज़र शिकायत तरीके से उन पर एक ऑर्डर निर्दिष्ट नहीं कर सकते हैं। मूल आदेश की कोई अवधारणा नहीं है जब तक कि यह पहले से ही किसी नियम द्वारा आदेश नहीं दिया जाता है।

तो सर्वर पर डेटा सॉर्ट करें और फिर उसी क्रमबद्ध क्रम में इसके बारे में बताएं।

वैकल्पिक रूप से प्रारूप JSON होने की

{ "values": [ 
    { "someKey": "someVal" }, 
    { "someOtherKey": "someOtherVal" } 
] } 

आप एक for (i = 0; i < len; i++) पाश और "garantuee" मूल आदेश के साथ सरणी पर पुनरावृति कर सकते हैं।

0

"मूल" आप वस्तु में टाइमस्टैम्प मतलब द्वारा करते हैं, तो मैं किसी भी सरल पहले स्पष्ट रूप से सरणी सॉर्ट करने के लिए की तुलना में अन्य विकल्प के माध्यम से यह पाश नहीं है, और उसके बाद ही नहीं लगता।

2

फ़ायरफ़ॉक्स ऑब्जेक्ट्स में ऑर्डर रखें .. क्रोम में वे नहीं करते हैं। अन्य ब्राउज़र के बारे में कोई जानकारी नहीं है लेकिन दो अलग-अलग कार्यान्वयन पहले से ही दिखाते हैं कि आप इस पर भरोसा नहीं कर सकते हैं।

यदि आपको आदेश देने की आवश्यकता है, तो एक सूची का उपयोग करें;

[['abd', 'def'], ['ghi', 'jkl']] 
+0

यहां Chrome में इस मुद्दे के बारे में लिंक है: http://code.google.com/p/v8/issues/detail?id=164 –

+0

कोई एक {के: वी} ऑब्जेक्ट पर [के, वी] tuple पसंद करने का कारण? – Raynos

+0

@ फ़ेलिक्सकिंग यह कार्यान्वयन में एक अंतर जितना मुद्दा नहीं है। सभी मान्य, बस संगत नहीं है। – Raynos

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