【问题标题】:suddenly undefined array js突然未定义的数组js
【发布时间】:2019-01-24 21:25:48
【问题描述】:

为了好奇,我正在搞乱遗传算法。

当我撞墙时,我正在做生成切换部分。我从以前的演员数组中删除了下一代的父母,将它们推入父母数组并正在处理从父母数组中删除随机父母对并将它们存储在 progen1 和 progen2 变量中,但由于某种原因,内部数组 cromssomo 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)

我快疯了,不知道为什么会这样!

【问题讨论】:

  • 这里的父母是什么?也显示你的html
  • 是我存储上一代最适合的成员的数组
  • splice 返回一个数组。阅读documentationprogen1.cromossomo 将不存在;你需要得到progen1[0].cromossomo[0]
  • 你希望这条线做什么var progen1=parents.splice(n1);
  • 由于随机数产生完全相同的数字两次的问题,我需要暂时从父母身上移除后代

标签: javascript arrays genetic-algorithm


【解决方案1】:

splice() 返回一个包含从数组中删除的所有元素的数组。所以progen1 是从n1 开始的parents 的所有元素的数组,而不是单个对象。该数组没有cromossomo 属性,因此progen1.cromossomo[0] 尝试获取undefined0 索引。

如果您的意图只是从 parents 中删除 1 个元素,则需要在调用 splice() 时指定要删除的元素数量。然后您可以索引该值以获取该元素。

progen1 = parents.splice(n1, 1)[0];

【讨论】:

    【解决方案2】:

    错误信息为:Cannot read property '0' of undefined

    看着你的sn-p,我找到了cromossomo[0]

    如果parents[n1]progen1 中不存在cromossomo,则为undefined,这会导致错误。

    所以也许你先看看这些并验证它们每个都有一个cromosso

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 1970-01-01
      • 2021-06-26
      • 2022-07-22
      • 1970-01-01
      • 2020-07-04
      • 2013-06-13
      • 1970-01-01
      • 2014-12-13
      相关资源
      最近更新 更多