2012-12-11 16 views
5

के लिए सरणी में वस्तु लपेट मैं एक JSON कि कुछ इस तरह दिखता है:जावास्क्रिप्ट परिवर्तित या जटिल JSON

var countries = [ 
{ 
    name: 'united states', 
    program: { 
       name: 'usprogram' 
      } 
}, 
{ 
    name: 'mexico', 
    program: { 
       name: 'mexico program' 
      } 
}, 
{ 
    name: 'panama', 
    program: [ 
      { 
       name: 'panama program1' 
      }, 
      { 
       name: 'panama program2' 
      } 
      ] 
}, 
{ 
    name: 'canada' 
} 
]; 

वहाँ एक रास्ता हमेशा एक सरणी में countries.programs वस्तु रैप करने के लिए है ऐसी है कि अंतिम आउटपुट दिखता है इस तरह? मैंने अंडरस्कोरजेएस में कुछ उपयोगिता कार्यों की कोशिश की, लेकिन समाधान ने मुझे दूर कर दिया है।

var countries = [ 
{ 
    name: 'united states', 
    program: [ //need to wrap this object into an array 
      { 
       name: 'usprogram' 
      } 
      ] 
}, 
{ 
    name: 'mexico', 
    program: [ //need to wrap this object into an array 
      { 
       name: 'mexico program' 
      } 
      ] 
}, 
{ 
    name: 'panama', 
    program: [ 
      { 
       name: 'panama program1' 
      }, 
      { 
       name: 'panama program2' 
      } 
      ] 
}, 
{ 
    name: 'canada' 
} 
]; 

धन्यवाद!

+0

आप अपने JSON कैसे कर रहे हैं? या आप सदस्य को केवल सरणी में कनवर्ट करना चाहते हैं जब आप इसे एक्सेस कर रहे हों? – Sampson

+3

यह JSON नहीं है, यह जावास्क्रिप्ट ऑब्जेक्ट्स और सरणी है। जेएसओएन वस्तुओं और सरणी का प्रतिनिधित्व करने के लिए एक पाठ प्रारूप है। – Guffa

उत्तर

18

स्वत: नहीं काम कर सकता था, नहीं। देशों के माध्यम से लूप, फिर country.program = [].concat(country.program)। जादू का यह आखिरी टुकड़ा वैल्यू को लपेट देगा यदि यह सरणी नहीं है, और इसे छोड़ दें। अधिकतर। (यह एक अलग, लेकिन समकक्ष सरणी होगी)।

अनुरोध प्रति

संपादित करें:

_.each(countries, function(country) { 
    country.program = [].concat(country.program); 
}); 
+0

मुझे यकीन नहीं है कि आपका क्या मतलब है। क्या आप टाइप कर सकते हैं यह कैसे काम करेगा? – Kevin

+0

@ केविन: वहां आप जाते हैं। – Amadan

+2

यह शानदार है! स्पष्टीकरण के लिए धन्यवाद। – Kevin

1

कुछ इस तरह

_.each(countries, function(country) { 
      ! _.isArray(country.program) && (country.program = [country.program]); 
        }); 
+0

यह मेरे लिए काम करता है, लेकिन जेएसलिंट इस त्रुटि को फेंकता है: त्रुटि: लाइन 24 पर समस्या समस्या 79: एक असाइनमेंट या फ़ंक्शन कॉल की अपेक्षा की गई और इसके बजाय एक अभिव्यक्ति देखी गई। ! _.isArray (country.program) && (country.program = [country.program ... – Kevin

+0

@ केविन: यह एक स्टाइल शिकायत है; कार्यक्रम अभी भी काम करना चाहिए। – Amadan

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