Avatar billede KlausEC Nybegynder
13. oktober 2009 - 15:01 Der er 7 kommentarer og
1 løsning

Objektmanipulering

Hej,

Jeg har funktion, der medtager et array som parameter. Denne funktion returnerer et objekt. Jeg vil gerne manipulere med det objekt.

function createBlah(labels) {
  var optionsObj = {
  ...
  series: [
    {label: 'bob'},
    {label: 'per'}
    ...
  ]
  ...

  Her vil jeg så gerne redigere i indholdet af objektet i forhold til min parameter - inden objektet skal returneres

  Jeg ved, man KAN gøre sådan her:
  optionsObj.series = [ {label: labels[0]}, {label: labels[1]} ];

  Jeg vil dog vældig gerne have min series til at være af dynamisk størrelse, så jeg ville gerne kunne iterere henover mit array, og så manipulere objektet ud fra det. Problemet er lidt, at indholdet af optionsObj.series ikke bare er en strengværdi eller noget i den stil, så jeg ved ikke helt, hvordan jeg skal gribe det an.

  Jeg forestillede mig noget i stil med: (incomming skrammel/pseudo)
  optionsObj.series = [; //ved godt, det ikke kan lade sig gøre, men illustratorisk giver det mening
  for (var i=0;i<labels.length;i++) {
    optionsObj.series += {label: labels[i]};
    if ((i+1) < labels.length){ //der er mindst 1 element mere
      optionsObj.series += ,;
    }
  }
  optionsObj.series += ];
Avatar billede KlausEC Nybegynder
13. oktober 2009 - 15:01 #1
Nogle gode idéer? :)
Avatar billede j4k0b Nybegynder
13. oktober 2009 - 15:49 #2
må indrømme at jeg ikke forstår hvad du mener :-(

Jeg har funktion, der medtager et array som parameter. Denne funktion returnerer et objekt. Jeg vil gerne manipulere med det objekt.
Ud fra din kode ser det ud til at du selv laver objektet. Hvorfor vil du manipulere det efterfølgende?

Jeg vil dog vældig gerne have min series til at være af dynamisk størrelse, så jeg ville gerne kunne iterere henover mit array
Med "mit array" mener du funktionens parameter "labels"? Ellers er jeg ikke med

Problemet er lidt, at indholdet af optionsObj.series ikke bare er en strengværdi eller noget i den stil, så jeg ved ikke helt, hvordan jeg skal gribe det an
Hvad er det så? Lidt indsigt ville hjælpe meget
Avatar billede KlausEC Nybegynder
13. oktober 2009 - 16:03 #3
Ja, jeg laver selv mit objekt, men jeg ved ikke, hvordan jeg laver det dynamisk ud af indholdet af et array - det er det, der er hele pointen...

Ja, jeg mener "labels" - som jeg skrev i starten er min parameter et array.

"Hvad er det så?" <- se det er her, jeg var på bar grund - ellers havde jeg ikke stillet mit spørgsmål :) Sagen er den, at jeg er ikke superskarp til objects i javascript. Jeg har lavet mit objekt via eksempler, og har fået skidtet til at virke - men når jeg så skal lave det dynamisk, begynder det at knibe.

Giver det mere mening nu?
Avatar billede j4k0b Nybegynder
13. oktober 2009 - 16:39 #4
Hvis jeg forstår dig korrekt, så skal createBlah() returnere et objekt der har en member (attribut) med navn "series" som er et array (eller en liste) indeholdende andre elementer. Har jeg ret?


var series = new Array();
for(i in labels) {
    series..push(labels[i]);
}

return {
    'some' : 'value',
    'series' : series
}
Avatar billede j4k0b Nybegynder
13. oktober 2009 - 16:46 #5
En god ting at være opmærksom når man roder med Javascript, er at der ikke er ret stor forskel på et array og et objekt. Du kan (næsten) arbejde med dem på samme måde.

Hvis du itererer over et array for du alle elementerne deri. Hvis du itererer over et objekt for du alle attributerne på objektet. Eksempelvis:


<script type="text/javascript">
    var someArray = new Array('john', 'jack', 'johnny');
    for(i in someArray) {
        document.write(i + ' = ' + someArray[i]);
    }

    var someObject = {'name':'jack', 'age':20, 'phone':'12345678'}
    for(i in someObject) {
        document.write(i + ' = ' + someObject[i]);
    }
</script>

Jeg har ikke lige testet ovenstående, men det skulle gerne skrive noget lignende:

0 = john
1 = jack
2 = johnny
name = jack
age = 20
phone = 12345678
Avatar billede KlausEC Nybegynder
13. oktober 2009 - 16:52 #6
"Hvis jeg forstår dig korrekt, så skal createBlah() returnere et objekt der har en member (attribut) med navn "series" som er et array (eller en liste) indeholdende andre elementer. Har jeg ret?" <- det skulle jeg mene, ja.

Jeg må kigge lidt mere på det...
Avatar billede KlausEC Nybegynder
14. oktober 2009 - 10:45 #7
Jeg tog udgangspunkt i dine eksempler j4k0b, og fandt en løsning.

løsningen:

for (i in labels) {
  optionsObj.series.push({label: labels[i]});
}

Lav et svar - og tak for hjælpen :)
Avatar billede j4k0b Nybegynder
14. oktober 2009 - 16:49 #8
ingen årsag :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester