2010-08-27 17 views
11

युक्त ऑब्जेक्ट्स की सरणी घोषित करें मेरे पास अन्य ऑब्जेक्ट्स वाली ऑब्जेक्ट्स हैं। जिस क्षण मैं उन्हें घोषित करता हूं वह बहुत लंबा हवादार होता है। ऐसा करने के लिए और अधिक गाढ़ा रास्ता देखते हैं है निम्नलिखित:ऑब्जेक्ट्स

:

function city(name,population) 
{ 
this.name = name; 
this.population = population; 
} 

function state(name) 
{ 
this.name= name; 
this.cities = new Array(); 
} 

function country(name) 
{ 
this.name= name; 
this.states = new Array(); 
} 

Countries = new Array(); 
Countries[0] = new Country("USA"); 
Countries[0].states[0] = new State("NH"); 
Countries[0].states[0].cities[0] = new city("Concord",12345); 
Countries[0].states[0].cities[1] = new city("Foo", 456); 
... 
Countries[3].states[6].cities[35] = new city("blah", 345); 

वहाँ इस सेटअप कि इतने वर्बोज़ नहीं है की घोषणा करने के लिए एक तरह से, कैसे एक xml बाहर रखी जाएगी, कुछ तरह के लिए कुछ similair है

data = 
usa 
    NH 
    concord: 34253 
    foo: 3423 
    blah: 99523 
    NC 
    place: 23522 
Uk 
    foo 
    bar: 35929 
    yah: 3452 

मैं समझ नहीं सकता कि वेरिएबल नामों को लगातार दोहराने के बिना सरणी घोषणाओं को कैसे घोंसला करना है।

उत्तर

16

उपयोग वस्तु और सरणी शाब्दिक:

var data = { 
    usa : { 
     NH : { 
      concord: 34253, 
      foo: 3423, 
      blah: 99523 
     }, 
     NC : { 
      place: 23522 
     } 
    }, 
    uk : { 
     foo : { 
     bar: 35929, 
     yah: 3452 
     } 
    } 
} 

या कुछ है कि अपने मूल कोड और सीधे दर्शाता है:

var Countries = [ 
    { 
     name : 'USA', 
     states : [ 
      { 
       name : 'NH', 
       cities : [ 
        { 
         name : 'Concord', 
         population : 12345 
        }, 
        { 
         name : "Foo", 
         population : 456 
        } 
        /* etc .. */ 
       ] 
      } 
     ] 
    }, 
    { 
     name : 'UK', 
     states : [ /* etc... */ ] 
    } 
] 

नोट: जावास्क्रिप्ट में, var foo = [] बिल्कुल के बराबर है (और करने के लिए पसंदीदा तरीका लिखें) var foo = new Array()। इसके अलावा, var foo = {}var foo = new Object() जैसा ही है।

नोट: अलग-अलग उप-ऑब्जेक्ट्स के बीच अल्पविराम जोड़ने के लिए मत भूलना।

+0

मैं इस सरणी की सामग्री को किसी अन्य स्वतंत्र सरणी में कैसे कॉपी करूं? जब मैं करता हूं, न्यू_Countries [1] = देश [0], मुझे लगता है कि ऑब्जेक्ट संदर्भ की प्रतिलिपि बनाई जा रही है और दोनों एक ही वस्तु को इंगित करते हैं। धन्यवाद। – Themasterhimself

+0

@Themasterhimself: गहरी प्रतिलिपि के लिए आपको इसे अपने आप पुनः करने की आवश्यकता है। सरणी और वस्तुओं के माध्यम से पुनरावृत्त करने के लिए फ़ंक्शंस लिखें और जब तक आप कोई संख्या या स्ट्रिंग न दबाएं तब तक उन्हें एक-दूसरे को कॉल करें। ऑब्जेक्ट्स के लिए ऑब्जेक्ट्स के लिए (var x = 0; x slebetman

+0

@Themasterhimself: कुछ पुस्तकालय पहले ही गहरी प्रतिलिपि विधियों/कार्यों को लागू कर सकते हैं। यह jQuery या अंडरस्कोर को देखने लायक हो सकता है। लेकिन खुद को लिखना वाकई मुश्किल नहीं है। – slebetman

3
data = { 
usa: { 
    NH: { 
    concord: 34253, 
    foo: 3423, 
    blah: 99845 
    } 
uk: { 
    foo: { 
    bar: 3454, 
    yah: 33457 
    } 
    } 
} 

}

4

यह आपके लिए काफी अच्छा होगा?

var data = [ 
    { name: "USA", 
    states: [ 
     { name: "NH", 
     cities: [ 
      { name: "concord", population: 34253 }, 
      { name: "foo", population: 3423 }, 
      { name: "blah", population: 99523 } 
     ] 
     }, 
     { name: "NC", 
     cities: [ 
      { name: "place", population: 23522 } 
     ] 
     } 
    ] 
    }, 
    { 
    name: "UK", 
    states: [ 
     { name: "foo", 
     cities: [ 
        { name: "bar", population: 35929 }, 
        { name: "yah", population: 3452 } 
       ] 
     } 
    ] 
    } 
] 
संबंधित मुद्दे