如何实现随机选定杀手并从castMembers数组中移除该元素?
问题分析与解决方案
你的核心需求是从castMembers数组随机挑选一名角色作为杀手,将其从原数组移除并存入killer变量。当前代码的问题出在移除元素的逻辑上,具体错误点如下:
- 错误遍历字符串长度:你循环的是
killer.length,但killer是从数组中取出的字符串,遍历的是字符串的字符数量,而非数组元素。 - 不存在的
id属性:castMembers中的元素都是纯字符串,没有id属性,killer[i].id == 1这个判断永远不会成立。 - 错误调用数组方法:
killer是字符串,不能调用数组的splice()方法,这会直接报错。
修正后的代码
你已经通过randomNumber拿到了杀手在数组中的索引,直接用这个索引对castMembers执行splice即可,不需要额外循环:
// Function to randomly select the Killer function chooseKiller(){ // 随机生成数组索引 let randomNumber = Math.floor(Math.random() * castMembers.length); // 取出杀手并存入变量 killer = castMembers[randomNumber]; console.log ("A new killer has been chosen: " + killer); // 从castMembers数组中移除该杀手(splice返回被移除的元素数组,这里我们不需要接收) castMembers.splice(randomNumber, 1); // 可选:验证移除结果 console.log("剩余幸存者:", castMembers); }
另一种实现方式(如果不知道索引时)
如果后续场景中你是先随机获取杀手字符串,再找索引移除,可以用indexOf方法:
function chooseKiller(){ killer = getRandom(castMembers); // 复用你已有的getRandom函数 console.log ("A new killer has been chosen: " + killer); // 找到杀手在数组中的索引 const killerIndex = castMembers.indexOf(killer); // 确保索引有效(避免数组为空或元素不存在的情况) if(killerIndex !== -1){ castMembers.splice(killerIndex, 1); } }
两种方式都能实现你的需求,第一种更高效,因为直接使用了随机生成的索引,不需要额外查找。
内容的提问来源于stack exchange,提问作者Yosuf
相关产品推荐
相关产品推荐

