使用接头后结果“未定义”

时间:2019-03-01 14:42:39

标签: javascript

我正在尝试使用JS游戏中的权力游戏来编码随机房屋生成器, 此刻的代码如下:

//Houses Array:
var HousesArray = [
 'Stark',
'Lanister',
'Greyjoy',
'Barathion',
'Arryn',
'Tyrell',
'Martell',
'Targaryen'
];

//Houses Variables:
var house1 = {}
var house2 = {}
var house3 = {}

//Random House Generator
var RandomIndex = Math.floor(Math.random()*HousesArray.length)
var RandomElement = HousesArray[RandomIndex]

//3 Players Generator:
 house1 = RandomElement
   console.log(house1)

   HousesArray.splice(house1,1)
   RandomElement = HousesArray[RandomIndex]
   house2 = RandomElement
   console.log(house2)
   
   HousesArray.splice(house2,1)
   RandomElement = HousesArray[RandomIndex]
   house3 = RandomElement
   console.log(house3)

我在这里尝试做的是给house1变量一个来自HousesArray Eelements之一的随机房屋名称, 将其回显到控制台日志, 然后使用拼接命令从HousesArray中删除所选元素(以确保下一个选择不会是相同的)。 毕竟-从HousesArray中剩余的元素生成新的房屋名称,然后重复。 但是对于某些原因,每次house1 =“ Targaryen”(或house2)时,下2/1个解决方案都会自动返回“未定义”(我相信它是因为“ Targaryen”元素是列表中的最后一个)

我该如何解决?

3 个答案:

答案 0 :(得分:0)

这里似乎没有正确使用splice方法,它使用前两个参数作为数字,而第三个参数将是您要替换的元素。相反,我会在这里使用过滤器:

org.apache.spark.sql.types.DataType

答案 1 :(得分:0)

您的代码不起作用,因为RandomIndex始终相同,如果它是7,它将返回undefined,因为splice通过删除找到的{ {1}},

House更改为每次调用的函数,以便它使用数组的新长度生成新索引:

RandomIndex

var RandomIndex = () => Math.floor(Math.random() * HousesArray.length)

答案 2 :(得分:0)

这让我感到很困惑,我会做这样的事情:

现在,如果您console.log(houses),您将从随机位置获得3个随机房屋(如上述评论所述),从而使玩家2和3能够比玩家1和2早获得房屋的位置

希望这会有所帮助:)好像是一个有趣的游戏:

//Houses Array:
var HousesArray = ['Stark', 'Lanister', 'Greyjoy', 'Barathion', 'Arryn', 'Tyrell', 'Martell', 'Targaryen'];

// stores the houses
var houses = [];

// Generates 3 random numbers and allows players 2 and 3 to get the houses early in position than player 1 and 2
var arr = [];
while (arr.length < 3) {
    var r = Math.floor(Math.random() * 8);
    if(arr.indexOf(r) === -1) arr.push(r);
}

// Pushed the houses to the house array
for (var x = 0; x < arr.length; x++) {
  houses.push(HousesArray[arr[x]])
} 

console.log(houses);