2012-07-25 13 views
7

के साथ बहुआयामी ऑब्जेक्ट बनाएं I कुछ हद तक उन्नत "फ़्लोट" jQuery प्लगिंग ग्राफ़ बनाने की कोशिश कर रहा है। इसके लिए, मुझे एक बहुआयामी वस्तु की आवश्यकता है (या कम से कम मुझे लगता है कि यह है)।multidimentional arrays

संरचना इस तरह दिखना चाहिए: मेरे से

var datasets = { 
     "usa": { 
      label: "USA", 
      data: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]] 
     },   
     "russia": { 
      label: "Russia", 
      data: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]] 
     } 
}; 

कोड-पीछे मैं कुछ सूचियों इस तरह लग रही बना लेने के बाद (नहीं एक ही डेटा, लेकिन ध्यान रखें कि न):

<ul id="MOBILISATION"> 
    <li data-key="2012/3/27">02:10</li> 
    <li data-key="2012/3/28">05:25</li> 
    <li data-key="2012/3/29">09:21</li> 
    <li data-key="2012/3/30">00:00</li> 
    <li data-key="2012/3/31">00:00</li> 
</ul> 
<ul id="OPERATIONS"> 
    <li data-key="2012/3/27">19:51</li> 
    <li data-key="2012/3/28">18:35</li> 
    <li data-key="2012/3/29">14:39</li> 
    <li data-key="2012/3/30">07:46</li> 
    <li data-key="2012/3/31">10:26</li> 
</ul> 

जहां "यूएसए/यूएसए" "मोबिलिज़ेशन" है, "1 9 88" "2012/3/27" और "4839 9 4" "02:10" है। आपको तस्वीर मिलती है !!?

मैं कुछ jQuery लेखन की कोशिश की है, लेकिन यह स्पष्ट रूप से काम नहीं करता है:

var objects = []; 
    var array = []; 
    var categoryName = ""; 
    $('div#Container ul').each(function() { 
     catName = $(this).attr('id'); 
     $('li', this).each(function() { 
      array.push([new Date($(this).data('key')).getTime(), $(this).text()]); 
     }); 

     objects.push({ categoryName: { label: categoryName, data: array} }); 
    }); 
    var datasets = objects; 

आप मैं objects सरणी के लिए धक्का का उपयोग किया है देख सकते हैं। जाहिर है कि मुझे वह परिणाम नहीं दे रहा है जो मैं चाहता हूं। मैं थोड़े से इस में क्या और नीचे खो रहा हूं, क्योंकि पहली बार जावास्क्रिप्ट/jQuery ऑब्जेक्ट्स के साथ काम कर रहा हूं। इसके लिए सबसे अच्छा समाधान क्या है?

+0

अगर आप हमें वास्तविक सूची :-) – Bergi

+0

Haha मैं जानता हूँ कि दोस्त, im बस दे दी है यह आसान हो सकता है इसे टाइप करने के लिए आलसी होना। मुझे बस एक यादृच्छिक उदाहरण मिला :) –

उत्तर

6

आपके डेटासेट एक वस्तु है, एक सरणी नहीं - आप इसे धक्का नहीं दे सकते। इसके अलावा, आपके चर categoryName इस तरह काम नहीं करते हैं (dot and bracket notation पर और पढ़ें)। इस प्रयास करें:

var datasets = {}; 
$('div#Container ul').each(function() { 
    catName = this.id; 
    var array = []; 
    $('li', this).each(function() { 
     array.push([ 
      new Date($(this).data('key')).getTime(), 
      $(this).text() 
     ]); 
    }); 
    datasets[catName.toLowercase()] = { 
     label: catName.toUppercase(), 
     data: array 
    }; 
}); 

इसके अलावा, मैं यकीन नहीं है कि क्या तुम सच में Date वस्तुओं को बनाने की आवश्यकता होगी नहीं कर रहा हूँ, लेकिन वह अपने in- और आउटपुट स्वरूप पर निर्भर करता है।

+0

मुझे डेट ऑब्जेक्ट की आवश्यकता है क्योंकि मेरे पास "टाइम" में मेरा एक्स-अक्ष प्रॉपर्टी मोड है (फ़्लोट प्लगइन के लिए काम करना है)। बॉक्स के ठीक बाहर अपने कोड के साथ ग्राफ कंटेनर और श्रेणियां अच्छी तरह से खींची जाती हैं। मेरी अगली समस्या डेट ऑब्जेक्ट। ग्राफ में कोई डेटा/बार/रेखाएं नहीं हैं, क्योंकि प्लगइन वाई-अक्ष पर स्ट्रिंग "एचएच: मिमी" को समय के रूप में पहचान नहीं सकता है। इसे समझने के लिए एक सेकेंड दें और अपने उत्तर को सही के रूप में चिह्नित करें (भले ही अन्य सभी उत्तरों संभवतः उन्हें पढ़कर सही हों)। धन्यवाद –

+0

जैसा कि आप देख सकते हैं http://www18.speedyshare.com/zmgqp/download/graph.jpg :) –

+0

हम्म हाँ इसे काम करने के लिए नहीं मिल सकता है। क्या आपको पता है कि क्या करना है? मैंने इसे डेट ऑब्जेक्ट में कनवर्ट करने का प्रयास किया और प्लगइन वाई-अक्ष के लिए डेट प्रारूप प्रॉपर्टी सेट की। कोई भाग्य –

10

बदलें var objects = []; को var objects = {}; और

objects.push({ categoryName: { label: categoryName, data: array} }); 

objects[categoryName] = { label: categoryName, data: array}; 

को समस्या आप JSON वस्तुओं के साथ है बदल एक चर सूचकांक के साथ गुण स्थापित करने में है। यूओ ऊपर के रूप में ऐसा करने के लिए सरणी नोटेशन का उपयोग कर सकते हैं।

1

प्रयास करें

var data = {}; 
    $('div#Container ul').each(function() { 
     var sub_obj = data[$(this).attr('id').toLowerCase()] = { 
      label: $(this).attr('id').toUpperCase(), 
      data: [] 
     }; 
     $(this).children('li').each(function() { 
      sub_obj.data.push([$(this).data('key'), $(this).text()]); 
     }); 
    }); 
    console.log(data); 
1

इस प्रयास करें:

var datasets = {}; 

$('ul').each(function (i, v) { 
    catName = $(this).attr('id'); 
    datasets[catName] = { 
     label : catName, 
     data: []    
    };   
    $('li', this).each(function() { 
     datasets[catName].data.push([new Date($(this).data('key')).getTime(), $(this).text()]); 
    }) 
}); 

डेमो: http://jsfiddle.net/nfsYu/6/

+0

वस्तु का शाब्दिक उपयोग क्यों नहीं करें? – Bergi

+0

अभी भी बेहतर नहीं है, मेरा मतलब है कि संपूर्ण ऑब्जेक्ट न केवल नया ऑब्जेक्ट() ... – Bergi

+0

@ बरगी ठीक है .... – undefined