2012-05-27 19 views
7

मैं इस तरह, एक JSON ऑब्जेक्ट जो, जब पेज लोड शुरू की है के शीर्ष के लिए कुछ जोड़ना:एक JSON ऑब्जेक्ट

data[foo] = bar; 
data[foo2] = bar2; 
data[foo3] = bar3; 

वहाँ पहले foo तत्व से पहले एक तत्व इंजेक्षन करने के लिए एक रास्ता है, ताकि for var i in data करने पर, नया तत्व ऑब्जेक्ट शुरू होने पर जोड़े गए तत्वों से पहले looped जाएगा?

कारण यह है कि, मैं उपयोगकर्ता को कुछ आइटम प्रदर्शित कर रहा हूं। उपयोगकर्ता जावास्क्रिप्ट के द्वारा नया आइटम जोड़ता है, मैं इस नए आइटम सभी मौजूदा आइटम के ऊपर प्रदर्शित करने के लिए

data[newItem] = newItem; 

चाहते हैं, लेकिन जब मैं नया आइटम जोड़ने, यानी तब JSON ऑब्जेक्ट इस तरह दिखता है:

data[foo] = bar; 
data[foo2] = bar2; 
data[foo3] = bar3; 
data[newItem] = newItem; 
इसके बजाय मैं कैसे करना चाहते हैं

, जो है:

data[newItem] = newItem; 
data[foo] = bar; 
data[foo2] = bar2; 
data[foo3] = bar3; 

कोई भी विचार?

+0

[इस विषय] (http:

var objj1 = {name:'viru',lastname:'nehra'}; 

तो नई संपत्ति के साथ एक नई वस्तु है जो आप शीर्ष पर चाहते हैं बनाने // stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop) शायद प्रासंगिक है। अर्थात् वह हिस्सा जो कहता है: यदि आदेश प्रासंगिक है, * एक सरणी का उपयोग करें। * –

उत्तर

13

जेएस में, ऑब्जेक्ट गुणों की ऑर्डर की गारंटी नहीं है। इसलिए, भले ही उन्हें JSON स्ट्रिंग में ऑर्डर किया गया हो, जब किसी जेएस ऑब्जेक्ट के रूप में पार्स किया गया हो, तो आप कभी भी भविष्यवाणी नहीं करेंगे कि वे किस क्रम में आते हैं।

इसके बजाय बेहतर उपयोग सरणी। आइटम को पहली अनुक्रमणिका में रखने के लिए आप unshift() विधि का उपयोग कर सकते हैं।

var data = [bar,bar2,bar3]; 

data.unshift(newItem); 

//data = [newItem,bar,bar2,bar3]; 
+1

यह भी देखें http://stackoverflow.com/questions/648139/is-the-order-of-fields-in-a-javascript-object- अनुमानित-जब-लूपिंग-थ्रू-टी और http://stackoverflow.com/questions/586182/javascript-insert-item-into-array-at-a- विशिष्ट-index – georgebrock

+0

कोई विकल्प नहीं है, मैंने इसे पहले ही कोड किया है एक वस्तु के रूप में। मुझे एक सरणी का उपयोग करने के लिए इसे एक गजियन स्थानों में बदलना होगा। इसे किसी ऑब्जेक्ट के रूप में काम करने का तरीका क्या है? –

+0

इसलिए संबंधित डेटा प्राप्त करने के लिए 'डेटा ["foo"] 'का उपयोग करने का कोई तरीका नहीं है .. मैं सोच रहा हूं कि लाइब्रेरीज़ जावास्क्रिप्ट – wong2

-3

मैं तुम्हें, स्ट्रिंग के लिए रूपांतरित कर सकते हैं स्ट्रिंग की शुरुआत में अपने डेटा को संलग्न तो स्ट्रिंग फिर से कन्वर्ट "eval" एक तरह से उपयोग करते हुए

+8

कीबोर्ड से दूर कदम। – Incognito

+0

मैंने अंतर्दृष्टि –

+0

देकर सहायता करने की कोशिश की, कृपया अनुसंधान करें कि आपको eval का उपयोग क्यों नहीं करना चाहिए। फिर पता लगाएं कि आपको ऑब्जेक्ट्स को स्ट्रिंग्स में क्यों परिवर्तित नहीं किया जाना चाहिए और फिर वापस ... – Incognito

3

है वहाँ एक सुई JSON करने के लिए लगता है पहले foo तत्व से पहले तत्व?

कौन सा सरणी में पहले आता है:

window.object या window.alert?

न तो, वस्तुओं के पास ऑर्डर नहीं है। यदि आप एक सरणी एक सरणी का उपयोग करना चाहते हैं। वस्तुएं सरणी नहीं हैं।

आप

var ThingsInOrder = [ 
    FirstThing, 
    SecondThing, 
    ThirdThing 
]; 
ThingsInOrder.push(ForthThing); 

एक सरणी का उपयोग करें चाहते हैं।

यदि आप चाहते हैं:

var ThingsNeverInOrder = { 
    Window, 
    Alert, 
    Derp, 
    Herp 
}; 

ThingsNeverInOrder.foo = bar; 

एक वस्तु का प्रयोग करें।

8

Joseph the Dreamer के answer की तारीफ के रूप में, मैंने फ़ायरफ़ॉक्स & क्रोम में कुछ त्वरित जांच की है।

फ़ायरफ़ॉक्स:

var obj = {}; 

obj.a = 'a'; 
obj.c = 'c'; 
obj.b = 'b'; 
obj['0'] = '0'; 

for(var i in obj){ 
    console.log(i); 
} 

//prints: 
a 
c 
b 
0 

क्रोम:

var obj = {}; 

obj.a = 'a'; 
obj.c = 'c'; 
obj.b = 'b'; 
obj['0'] = '0'; 

for(var i in obj){ 
    console.log(i); 
} 

//prints: 
0 
a 
c 
b 
2

मैं इस पर ठोकर खाई और का उपयोग कर इसे हासिल कर लिया है:

const newObject = Object.assign({first: value}, oldObject)

जैसा कि बताया गया है, आदेश की गारंटी नहीं है लेकिन मेरे लिए यह काफी अच्छा है। :)

+0

सही काम किया। – AnthonyVO

0

एक ही ऑब्जेक्ट में नया मान जोड़ने के बजाय, आप एक नई ऑब्जेक्ट बना सकते हैं और वांछित गुणों को व्यवस्थित कर सकते हैं। उदाहरण:

var obj2 = {age: 21} 

और चलाने:

for(var key in objj1){ 
    obj2[key] = objj1[key] 
} 

obj2 = {age: 21, name: "viru", lastname: "nehra"} 
संबंधित मुद्दे