Javascript不读取以0开头的数组项

时间:2016-04-21 21:09:22

标签: javascript

我想给遗传算法一个机会,但我似乎找不到解决这个问题的方法。

这是我的代码:

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

如果运行代码,则会看到输出中存在大量未定义的内容。 会导致这种情况的原因是什么?

谢谢!

2 个答案:

答案 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开头的数字解码为八进制数。

&#13;
&#13;
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;
&#13;
&#13;