2016-04-21 13 views
6

Voglio dare una possibilità agli algoritmi genetici ma non riesco a trovare una soluzione per questo problema.Javascript non legge gli elementi dell'array che iniziano con 0

Questo è il mio codice:

var encodings = { 
 
    0000: 0, 
 
    0001: 1, 
 
    0010: 2, 
 
    0011: 3, 
 
    0100: 4, 
 
    0101: 5, 
 
    0110: 6, 
 
    0111: 7, 
 
    1000: 8, 
 
    1001: 9, 
 
    1010: "+", 
 
    1011: "-", 
 
    1100: "*", 
 
    1101: "/" 
 
}; 
 
var chromosome = ""; 
 

 
for (var i = 0; i < 36; i++) { 
 
    chromosome += Math.round(Math.random()); 
 
} 
 

 
var chromArray = chromosome.match(/.{1,4}/g); 
 

 
document.write(chromArray + "<br>"); 
 

 
for (var o = 0; o < 9; o++) { 
 
    document.write(encodings[chromArray[o]]); 
 
}

Se si esegue il codice, si vede che ci sono un sacco di undefineds nell'output. Cosa potrebbe causare questo?

Grazie!

+0

come si fa a gestire "1110" in voi cromosoma? – Thomas

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Integers –

+0

@Thomas Se una stringa generata con 1110 o 1111 la stringa non farà parte della popolazione iniziale, l'idea è aggiungere solo cromosomi alla popolazione che segue la regola "numero - operatore - numero". –

risposta

8

È necessario convertire le chiavi degli oggetti in stringhe

dovrebbe essere:

var encodings = 
{ 
    "0000": 0, 
    "0001": 1, 
    "0010": 2, 
    "0011": 3, 
    "0100": 4, 
    "0101": 5, 
    "0110": 6, 
    "0111": 7, 
    "1000": 8, 
    "1001": 9, 
    "1010": "+", 
    "1011": "-", 
    "1100": "*", 
    "1101": "/" 
}; 

var chromosome = ""; 

for (var i = 0; i < 36; i++) 
{ 
    chromosome += Math.round(Math.random()); 
} 

var chromArray = chromosome.match(/.{1,4}/g); 

document.write(chromArray + "<br>"); 

for (var o = 0; o < 9; o++) 
{ 
    document.write(encodings[chromArray[o]]); 
} 
+1

Grazie mille! –

3

Le chiavi dell'oggetto in cui il numero inizia con 0 si dovrebbe convertire in stringhe

Se si stampa il encodings vedrete il problema. JavaScript ha decodificato i numeri che iniziano con 0 come numero ottale.

var encodings = { 
 
    0000: 0, 
 
    0001: 1, 
 
    0010: 2, 
 
    0011: 3, 
 
    0100: 4, 
 
    0101: 5, 
 
    0110: 6, 
 
    0111: 7, 
 
    1000: 8, 
 
    1001: 9, 
 
    1010: "+", 
 
    1011: "-", 
 
    1100: "*", 
 
    1101: "/" 
 
}; 
 

 

 
document.write('<pre>' + JSON.stringify(encodings, 0, 2) + '</pre>')

Problemi correlati