2016-04-21 13 views
6

我想給遺傳算法一個機會,但我似乎無法找到解決此問題的方案。Javascript不讀取以0開頭的數組項目

這是我的代碼:

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

如果您運行的代碼,你會發現有很多在輸出undefineds的。 這會導致什麼?

謝謝!

+0

你怎麼在你的染色體辦理 「1110」? – Thomas

+1

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

+0

@Thomas如果用1110或1111生成的字符串不會成爲初始羣體的一部分,這個想法是隻向符合「數字 - 算子 - 數字」規則的人羣添加染色體。 –

回答

8

您應該對象的鍵轉換成字符串

它應該是:

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

非常感謝! –

3

,其中的數字與0開始,你應該轉換成字符串對象的鍵

如果您打印encodings,您會看到問題。 JavaScript將0開頭的數字解碼爲八進制數。

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