Toon posts:

[AS] Dynamisch associative array maken?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om iets als onderstaande dynamisch aan te maken?

code:
1
2
3
4
var help = [
    {Title: "Help!", Time: "2:20", Composer: "Lennon/McCartney"},
    {Title: "The Night Before", Time: "2:36", Composer: "Lennon/McCartney"},
 ];

Ik ben wat aan het experimenteren, en wil een datagrid met zo'n type array vullen. Overigens ben ik nog redelijk n00b, dus als het mogelijk is graag een goed voorbeeld..

Het zou makkelijk zijn als er het met een eval mogelijk is, maar dat zit er niet in volgens mij.

[ Voor 9% gewijzigd door Verwijderd op 18-07-2006 12:35 ]


Verwijderd

Sure, maar dan kun je denk ik beter een Object maken (wat in feite een soort associative array is):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// constructor:
function Item( Title, Time, Composer ) {
    this.Title = Title;
    this.Time = Time;
    this.Composer = Composer;
}

var help = new Array();
help.push(
  new Item('Heb je even voor mij', '3:00', 'Bauer')
);


alert(help[0].Title);

[ Voor 8% gewijzigd door Verwijderd op 18-07-2006 13:33 ]


Verwijderd

Topicstarter
Ok, dat ziet er goed uit; heb ik sowieso wat aan, thanks!

Alleen heb ik nog 1 probleem.. Ik weet namelijk niet welke "properties" (title, time, composer, onbekend) ik ga krijgen. Dat kan er 1 zijn, en dat kunnen er 10 zijn. Daarom wil ik het dynamisch hebben.

Uiteindelijk krijg ik een soort string binnen die er ogenveer als volgt uitziet:

kolomA=waarde,kolomB=waarde,kolomC=waarde|kolomA=waarde,kolomB=waarde,kolomC=waarde

Waarbij het "|" teken het scheidingsteken voor een nieuwe row is.
Hoe de kolommen gaan heten (in bovenstaand voorbeeld dus kolomA, kolomB en kolomC) weet ik niet, en hoeveel kolommen ik ga krijgen weet ik ook niet.

Maar goed, met bovenstaande string wil ik een dataset vullen, en daarom zou ik dynamisch (tijdens runtime) een constructor of array moeten kunnen maken... Is dat mogelijk?

Verwijderd

Tja, dat wordt dan toch een custom parsertje schrijven, denk ik. Is op zich niet moeilijk:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var s = 'kolomA=waarde1,kolomB=waarde2,kolomC=waarde3|kolomA=waarde4,kolomB=waarde5,kolomC=waarde6';

function parseToArray(s) {
    var resultRows = new Array();
    
    var rows = s.split('|');
    for(var i=0; i<rows.length; i++) {
        resultRows[i] = new Object();
        
        var cols = rows[i].split(',');
        for(var j=0; j<cols.length; j++) {
            var nameValuePair = cols[j].split('=');
            resultRows[i][nameValuePair[0]] = nameValuePair[1];
        }
    }
    
    return resultRows;
}


alert(parseToArray(s)[1].kolomC);