Just nu i M3-nätverket
Gå till innehåll
csone

Bygga ihop en array i en for next loop

Rekommendera Poster

csone

Hello 

Jag har ett problem vid skapandet av en dynamisk graf.

Jag försöker göra något i stil med det här...

 

var linje_1 = []

var linje_2 = []

 

for( var i = 0; i < data.length; i++) {

arraynam = 'linje_'+data[];

   arraynam.push({ label: data.x_+''+sid[a]+'', y: data.y_+''+sid[a]+'' })

}

 

"Lösningen" ovan blir undefined.

Jag vill alltså bygga ihop arraynamnet onthefly i for next loopen men det fungerar dåligt. Det hjälper liksom inte heller att JS inte är min paradgren :-)

 

Har kört trial and error ett tag utan att få det till att funka.

 

Tacksam för förslag och input.

/csone

 

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
ChromaWoods

Det är svårt att debugga din lösning utan att veta vad som finns utanför den där specifika kodsnutten. Ett tips är att skapa ett reducerat exempel på t.ex jsbin eller CodePen. Vad är data, vad innehåller den? Vad är linje_1? Vad är linje_2? Förklara hur koden är tänkt att fungera så kommer dina chanser att få ett tillfredställande svar att öka markant.

 

Men hur som helst.. ett uppenbart fel är att du tilldelar arraynam ett strängvärde och du kan därför inte köra push på den eftersom push är en metod som arrayer har, inte strängar. Du kan inte skapa en array på det viset. Men även om det hade gått så hade din kod misslyckats eftersom du inte använder räknaren (i) i 'linje_'+data[].

 

Jag förstår inte varför du försöker skapa en massa arrayer med arbiträra namn, hur ska du använda dem sedan?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
mac3

vill du att det ska se ut  så här ?

 

data = array(

           1 => array('y' => 12 , x => 13, z => 44 , b => 56 ),

           2 => array('y' => 1 , x => 3, z => 54 , b => 36 ),

}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
csone
Postad (redigerade)

Ibland när man sitter i flera timmar men ett problem är det svårt att beskriva på ett bra sätt och beskrivning blir något slarvig. Ber om ursäkt för det.

Har hur som helst hittat ett lösningsförslag med följande...

 

var lines = {
linje_1: [],
linje_2: []
};

for (var i = 0; i < data.length; i++) {
var arrayname = 'linje_' + data[i];
lines[arrayname].push({ label: data[i].x_ + sid[a], y: data[i].y_ + sid[a]});
}

 

Det som skulle göras var alltså att använda en json feed - http://212.181.30.156/webapp/json/jsontest.asp?sid=2,3 - med tempvärden och presentera den i en graf - http://canvasjs.com/editor/?id=http://canvasjs.com/example/gallery/line/moble_subscriptions/ -

 

anledningen till att jag behövde skapa arrays i loopen är att antalet linjer/sensorer kan variera - ex  sid=2/sid=2,3,5 osv. "sid" i requesten är alltså dom olika givarna och via x värdet i json kan jag identifiera givarna (x1 = givare1, x2=givare2 osv.) 

 

I skrivande stund har jag detta...

http://212.181.30.156/webapp/graf_multiple1.asp

Går iofs att göra en fullösning där man räknar antal sid, använder if satser och begränsar antalet multipla givare.

 

/csone

Redigerad av csone

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
csone
//Av nån anledning verkar inte hela mitt inlägg visas så här kommer det igen//

 

Ibland när man sitter i flera timmar men ett problem är det svårt att beskriva på ett bra sätt och beskrivning blir något slarvig. Ber om ursäkt för det.

Har hur som helst hittat ett lösningsförslag med följande...

 

var lines = {

linje_1: [],

linje_2: []

};

 

for (var i = 0; i < data.length; i++) {

var arrayname = 'linje_' + data;

lines[arrayname].push({ label: data.x_ + sid[a], y: data.y_ + sid[a]});

}

 

Det som skulle göras var alltså att använda en json feed - http://212.181.30.156/webapp/json/jsontest.asp?sid=2,3 - med tempvärden och presentera den i en graf - http://canvasjs.com/editor/?id=http://canvasjs.com/example/gallery/line/moble_subscriptions/ -

 

anledningen till att jag behövde skapa arrays i loopen är att antalet linjer/sensorer kan variera - ex  sid=2/sid=2,3,5 osv. "sid" i requesten är alltså dom olika givarna och via x värdet i json kan jag identifiera givarna (x1 = givare1, x2=givare2 osv.) 

 

I skrivande stund har jag detta...


Går iofs att göra en fullösning där man räknar antal sid, använder if satser och begränsar antalet multipla givare.

 

/csone

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
ChromaWoods

Ok nu börjar det klarna. Cool app förresten. :)

 

Kollade på din JSON-struktur. Den är vad jag förstår helt platt, dvs datapunkterna ligger kommaseparerade i en enda lång rad oavsett vilken linje de tillhör? Funderar på om lösningen skulle bli betydligt enklare om JSON-strukturen kunde göra den indelningen från början, så att du slipper iterera igenom dem i JavaScriptet. Jag tänker något i den här stilen:

[
  { x1: [{ /*datapunkter*/ }] },
  { x2: [{ /*datapunkter*/ }] },
  { x3: [{ /*datapunkter*/ }] }
]

Eller:

[
  [ /*datapunkter för x1*/ ],
  [ /*datapunkter för x2*/ ],
  [ /*datapunkter för x3*/ ]
]

Fast backend-systemet kanske inte kan leverera datat på det sättet?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
csone

Tack! :-)

Ska prova lite med lösningsförslaget med dom dynamiskt skapade arrayerna. I hårdkodat läge blir det exakt som jag vill. Så kanske i nästa steg det blir att effektivisera json datan. Skulle egentligen velat ha hela graflinje datan från json - då får jag möjlighet att styra utseendet på ett enklare sätt (har provat nedan men fick det inte till att funka)

{        
type: "line",
lineThickness:3,
showInLegend: true,           
name: "USA",        
axisYType:"secondary",
dataPoints: [
{ x: new Date(2001, 00), y: 0.16 },
{ x: new Date(2002, 0), y: 0.17 },
{ x: new Date(2003, 0), y: 0.18},
{ x: new Date(2004, 0), y: 0.19 },
{ x: new Date(2005, 0), y: 0.20 },
{ x: new Date(2006, 0), y: 0.23 },
{ x: new Date(2007, 0), y: 0.261 },
{ x: new Date(2008, 0), y: 0.289  },
{ x: new Date(2009, 0), y: 0.3 },
{ x: new Date(2010, 0), y: 0.31 },
{ x: new Date(2011, 0), y: 0.32 },
{ x: new Date(2012, 0), y: 0.33 }
]
}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...