Message d'erreur : no properties
J'ai eu le message "TypeError: genome[a] has no properties, line 18" avec le code suivant (je me lance dans un algorithme génétique, d'où les noms). La ligne 18 est celle de la première instruction dans la boucle for.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
var population = 10;
var numGenes = 55;
// déclaration du génome et remplissage par valeurs à zéro
var genome = [[1,2], [1, 2]];
genome.length = population;
for (var a = 0 ; a < population; a++) {
genome[a].length = numGenes;
for (var b = 0 ; b < numGenes; b++) {
genome[a][b] = 0.;
};
};
post ("Taille du génome : "+genome.length);
post();
post ("Génome : "+genome);
post(); |
La définition du tableau avec [[1,2], [1, 2]] plutôt qu'avec new Array et l'utilisation de la propriété length sont déjà des tentatives d'échapper au fatidique message d'erreur, mais cela ne marche pas.
Où est le problème? :arf:
Ça marche, mais je ne suis pas sûr d'avoir tout compris...
Citation:
Envoyé par
Bovino
Je vois mal l'intérêt de fixer les dimensions d'un tableau déjà défini (donc qui a des dimensions adaptées) mais si c'est une contrainte, il faut que tu testes à chaque itération si l'élément sur lequel tu pointes existe réellement.
Citation:
EDIT :
Si ton but est de remplir ton tableau de valeurs par défaut, tu peux faire le contraire :
Code:
1 2 3 4 5 6 7 8 9 10
| for (var a = 0; a < population; a++) {
if(!genome[a]) {
genome[a] = [];
for (b = 0 ; b < numGenes; b++) {
if(!genome[a][b]){
genome[a][b] = 0.;
}
}
};
}; |
Mon but est en effet de remplir le tableau, mais est-ce que j'ai bien compris :
1. Les tests visent à vérifier que les cases du tableau existent réellement ? Ou bien existent-elles mais sont vides ?
2. Les cases n'existent pas parce que je n'ai pas dimensionné mon tableau préalablement ?
Donc, la question est : est-ce que j'aurais pu procéder autrement pour dimensionner mon tableau, sachant que je travaille avec un tableau multidimensionnel ? Entretemps j'ai trouvé un script pour définir une fonction de création de tableaux multidimensionnels et cela semble fonctionner, mais y avait-il un autre système, avec lequel remplir le tableau au moment de sa création?
J'espère ne pas être trop insistant, mais j'ai vraiment envie de comprendre, afin que le problème ne se répète plus. Cela me semble important.