2011-11-26 86 views
0

我了解JavaScript及其语法,但我对其标准函数相对不熟悉。随机嵌套和填充数组

对于基本的JavaScript游戏我工作,我需要随机巢阵列像这样:

阵列与2项(两个嵌套阵列)

  1. 嵌套阵列2项(二嵌套阵列)
    • 嵌套阵列2项
    • 嵌套阵列与1个项目
  2. 嵌套阵列2项(一个嵌套数组,一个空时隙)
    • 嵌套阵列与1个项目
      • item

我希望是很清晰;如果有人可以发布指向某些文档的链接,或者指导我如何构建代码,那么我可能会从中获取该代码。

+0

所以嵌套是随机的,但什么项目?预先确定的,随机的?项目只能在结构中出现两个层次?你想要一个随机深度还是总是应该是2个等级?什么是空插槽?未定义?空值?空的子阵列? –

+0

@Adam Zalcman我希望物品只出现在第二层,并且有一个固定的深度。这些项目无关紧要,因为我现在只想创建一个基本脚本 - 我以后可以随时增加复杂性。 –

+0

哦,空的项目只是空。 –

回答

1

以下代码提供了解决您的问题的build2LevelArray()的一些功能。它会创建一个长度不超过2的数组(您可以使用其他数字来调整buildArray()中的3)。因为我们返回null而不是空数组。返回数组的项目本身是null值或数组。每个数组都具有不大于2的长度,并且其所有元素都由buildItem()(在buildItem()中作为示例的硬编码1)生成。

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 
+0

非常棒的答案 - 非常感谢!太糟糕了,我只能对付一次......再次感谢。 –