You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现随机选定杀手并从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:25:29