突然未定义数组js

时间:2018-08-17 19:57:30

标签: javascript arrays genetic-algorithm

我对遗传算法感到好奇。

撞墙时我正在做发电开关部分。我从以前的actor数组中删除了下一代的父级,将它们推到了parents数组中,并且正要从父级数组中删除随机的父对,并将它们存储在progen1和progen2变量中,但是由于某种原因, progen1是未定义的,尽管当progen1存储在父级数组中时,我可以访问它的元素。

此代码:

var n1=Math.floor((Math.random(Math.floor(parents.length))));
console.log(parents[n1].cromossomo[0]);
var progen1=parents.splice(n1);
console.log(progen1.cromossomo[0]);
var n2=Math.floor((Math.random(Math.floor(parents.length))));
var progen2=parents.splice(n2);

产生:

{dx: -4.805923044269889, dy: -2.447397585132567}dx: -4.805923044269889dy: -2.447397585132567__proto__: Object
scripts.js:94 Uncaught TypeError: Cannot read property '0' of undefined
at switchGeneration (scripts.js:94)
at run (scripts.js:140)

我不知道为什么会发疯!

2 个答案:

答案 0 :(得分:1)

splice()返回一个数组,其中包含从数组中删除的所有元素。因此,progen1parents起始的n1所有元素的数组,而不是单个对象。数组没有cromossomo属性,因此progen1.cromossomo[0]尝试获取0的{​​{1}}索引。

如果要从undefined中删除1个元素,则需要指定调用parents时要删除的元素数量。然后,您可以为该值编制索引以获取该元素。

splice()

答案 1 :(得分:-1)

错误消息显示为:Cannot read property '0' of undefined

看着您的代码段,我发现cromossomo[0]

如果cromossomoparents[n1]中都不存在progen1,则为undefined,从而导致错误。

因此,也许您首先查看一下这些内容,并验证它们中的每一个都有一个cromosso