2016-04-21 11 views
6

Chcę dać szansę algorytmom genetycznym, ale nie mogę znaleźć rozwiązania dla tego problemu.JavaScript nie czyta elementów tablicy zaczynających się od 0

To jest mój kod:

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]]); 
 
}

Jeśli uruchomić kod, widać, że istnieje wiele undefineds na wyjściu. Co by to spowodowało?

Dzięki!

+0

w jaki sposób można obsłużyć "1110" w was chromosomie? – Thomas

+1

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

+0

@Thomas Jeśli ciąg znaków wygenerowany za pomocą 1110 lub 1111 ciąg nie będzie częścią początkowej populacji, pomysł jest następujący: dodawanie tylko chromosomów do populacji, która kieruje się zasadą "numer - operator - liczba". –

Odpowiedz

8

należy przekonwertować klucze do obiektu do strun

Powinno być:

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

Dziękuję bardzo! –

3

Klucze do obiektu, w którym rozpoczyna liczba z 0 należy przekonwertować do ciągów

Jeśli wydrukujesz encodings, zobaczysz problem. JavaScript dekodował numery rozpoczynające się od 0 jako liczby ósemkowe.

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>')

Powiązane problemy