我想给遗传算法一个机会,但我似乎找不到解决这个问题的方法。
这是我的代码:
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]]);
}
如果运行代码,则会看到输出中存在大量未定义的内容。 会导致这种情况的原因是什么?
谢谢!
答案 0 :(得分: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>')
&#13;