【问题标题】:Randomly nesting and populating arrays随机嵌套和填充数组
【发布时间】:2011-11-26 03:41:47
【问题描述】:

我了解javascript及其语法,但对它的标准函数比较陌生。

对于我正在开发的基本 javascript 游戏,我需要像这样随机嵌套数组:

包含 2 个项目的数组(两个嵌套数组)

  1. 包含 2 个项目的嵌套数组(两个嵌套数组)
    • 包含 2 个项目的嵌套数组
      • 项目
      • 项目
    • 包含 1 项的嵌套数组
      • 项目
  2. 包含 2 个项目的嵌套数组(一个嵌套数组,一个空槽)
    • 包含 1 项的嵌套数组
      • 项目

我希望这已经足够清楚了;如果有人可以发布一些文档的链接或者给我一些关于我应该如何构建我的代码的指针,我可能可以从那里得到它。

【问题讨论】:

  • 所以嵌套是随机的,但是项目呢?预定的,随机的?物品只能出现在结构深处的两层吗?您是否也想要一个随机深度,还是它总是应该是 2 个级别?什么是空槽?不明确的?空值?空子数组?
  • @Adam Zalcman 我希望项目只出现在第二层并且有一个固定的深度。这些项目并不重要,因为我现在只想创建一个基本脚本 - 我以后可以随时添加复杂性。
  • 哦,空的项目只是空。

标签: javascript arrays random


【解决方案1】:

下面的代码提供了一些功能,build2LevelArray() 解决了您的问题。它创建了一个长度不大于 2 的数组(您可以调整此将 buildArray() 中的 3 替换为其他数字)。空数组永远不会返回,因为我们返回 null。返回数组的项本身就是null 值或数组。每个数组项的长度不大于 2,其所有元素由buildItem() 生成(硬编码1 作为buildItem() 中的示例)。

function buildItem() {
  // This function implements item generation algorithm, for now, all items are 1s
  return 1;
}

function buildArray(itemGenerator) {
  var n = Math.floor(Math.random()*3); // Random integer between 0 and 2 (inclusive)
  if (n == 0) {
    return null; // Return nulls instead of empty arrays
  }
  var a = new Array();
  for (var i = 0; i < n; i++) {
    a.push(itemGenerator());
  }
  return a;
}

function build1LevelArray() {
  return buildArray(buildItem);
}

function build2LevelArray() {
  return buildArray(build1LevelArray);
}

它生成的示例值:

null            // no array
[null]          // example array of length 1
[[1, 1]]        // another example array of length 1
[null, [1, 1]]  // example array of length 2
[[1], [1, 1]]   // another example array of length 2

【讨论】:

  • 很棒的答案 - 非常感谢!太糟糕了,我只能投票一次......再次感谢。
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 2015-03-26
  • 2011-01-23
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多