2009-05-17 10 views
0

Désolé, je sais que c'est la programmation 101, mais je ne trouve pas de bonne documentation ...Comment créer une méthode pour une classe de tableau?

J'ai un tableau, et je veux lancer chaque membre comme un objet, puis les appeler par le nom attribué (ce serait beaucoup plus simple si javascript est autorisé pour les valeurs d'index sans nombre). Par exemple:

var things = ['chair', 'tv', 'bed']; 
var costs = ['10', '100', '75']; 

for (var i = 0; i < things.length; i++) { 
     thing.name = things[i]; 
     thing.cost = costs[i]; 
} 

alert(thing.name('tv').cost); 

Il est évident que ce n'est pas la meilleure façon de faire, mais le résultat souhaité serait une alerte dit « 100 ».

J'ai été aussi loin que la création d'une classe qui a une méthode appelée nom qui pointe vers l'objet principal, comme ceci:

function thing(name, cost) { 
     function name(thename) { 
       return this; 
     } 
this.thingname = name; 
this.name = name; 
this.cost = cost; 
} 

Mais cela nécessite encore que chaque objet a un nom unique variable, ce qui va à l'encontre de tout le point. Ce que je veux, c'est simplement jeter tout mon tableau dans une classe générique et appeler les valeurs dont j'ai besoin par le nom.

Je sais que c'est probablement facile à demander ici, mais je suis coincé!

Merci.

+0

Avez-vous envisagé d'utiliser le format d'objet JSON? http://www.json.org/js.html –

+1

Btw, ce n'est pas la programmation 101, vous semblez l'avoir. Ceci est juste javascript 101, cuz javascript notion d'un objet n'est pas tout à fait comme la plupart des autres langues (c'est beaucoup plus cool!). –

+0

Vous dites que javascript n'autorise pas les valeurs d'index sans nombre, mais c'est le cas! var x; x ['imNotaNumber'] = 'hai'; est parfaitement valide. –

Répondre

5

Pourquoi ne pas utiliser des objets?

var things = { 
    chair: 10, 
    tv: 100, 
    bed: 75 
}; 
alert(things.chair); // 10 
alert(things['tv']); // 100 
+0

err, les grands esprits se ressemblent? : p –

2
var stuff = { 
    chair: 10, 
    tv: 100, 
    bed: 75 
}; 
alert(stuff.chair); // alerts '10' 
alert(stuff['chair']); // alerts '10' 

stuff.house = 100000; 
stuff['car'] = 10000; 
alert(stuff['house']); // you get the picture... 
alert(stuff.car); 
+0

Oui en effet, gentil monsieur. :) –

1

Que diriez-vous simplement en utilisant un objet dictionnaire:

var things = {'chair':10, 'tv':100, 'bed':75}; 
alert(things['chair']) 

// if you want to use things['chair'].cost, it'd look more like this: 
var things = {'chair': {cost: 10}, 'tv': {cost: 100}, 'bed': {cost: 75}}; 
1

Pourquoi utiliser ne définissent pas vos tableaux comme un objet comme

var things = {'chair':10, 'tv':100, 'bed':75} 

Ensuite, vous pouvez accéder à des prix comme propriétés d'un tableau associatif

things.chair 

vous donnera 10

0

pourquoi ne pas essayer JSON:

comme

var myArray= {"things": [ 
        {"name":"chair","price":"10"}, 
        {"name":"tv","price":"100"}, 
        {"name":"bed","price":"75"} 
      ]}; 

//now you can use it like this 
for(var i=0; i< myArray.things.length; i++) 
{ 
    alert(myArray.things[i].name + " costs " + myArray.things[i].price); 
} 
0

Si vous devez le faire en utilisant le format de données d'origine (parce que vous avez pas d'influence sur il) utilisent ce qui suit:

var things = ['chair', 'tv', 'bed']; 
var costs = ['10', '100', '75']; 

var associatedThings; 

for(i=0,x=things.length;i<x;i++){ 
    associatedThings[things[i]] = {cost: costs[i]}; 
} 

alert(associatedThings['tv'].cost); 
Questions connexes