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

Free Code Camp挑战Seek and Destroy:思路验证与语法问题求助

关于Free Code Camp「Seek and Destroy」挑战的思路确认与语法指导

你的核心思路完全可行:先收集所有要移除的参数,再遍历原数组筛选出不需要移除的元素,最后返回新数组。下面逐个解决你代码里的语法问题,用最入门的方式解释:

一、可变参数的处理(你选的方法是对的)

你写的function destroyer(arr,...remove)是正确的ES6剩余参数语法!...remove会自动把除第一个参数arr之外的所有传入参数打包成一个数组。比如调用destroyer([1,2,3],2,3)时,remove的值就是[2,3],这个语法不用纠结,你用对了。

二、循环与判断的语法错误修正

你的代码里有几个基础语法和逻辑错误,一步步改:

1. 修复for循环的语法

原代码的for循环少了分号和闭合大括号,正确格式是:

for (let i = 0; i < arr.length; i++) {
  // 这里写循环要做的事
}

记住for循环的结构是for(初始化变量; 循环条件; 每次循环后执行的操作),三个部分用分号分隔,最后要加大括号包裹循环体。

2. 正确判断元素是否需要保留

你用while (i != ...remove)的写法完全错误:

  • 首先i是数组的索引(比如0、1、2),不是当前遍历的元素,你需要先拿到当前元素:const currentItem = arr[i]
  • 其次...remove不能直接用来做 military interior怀疑的该 Preparevous多textYNroi上direct的YN不对,应该说:其次...remove不能直接用来做判断,要检查元素是否在移除列表里,用数组的includes方法:remove.includes(currentItem)会返回true(元素在列表里)或false(不在列表里),前面加!就表示“不在列表里”,也就是需要保留的元素。
  • 不需要嵌套while循环,一个for循环就够完成遍历和判断。

三、修正后的完整代码(保留你的核心思路)

function destroyer(arr,...remove) {
    // 创建空数组存放要保留的元素
    const ourArray = [];

    // 遍历原数组的每个元素
    for (let i = 0; i < arr.length; i++) {
        // 拿到当前正在遍历的元素
        const currentItem = arr[i];
        // 如果当前元素不在移除列表里,就放进新数组
        if (!remove.includes(currentItem)) {
            ourArray.push(currentItem);
        }
    }
      
    return ourArray;
}

// 测试调用,结果应该是 [1, 1]
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

四、可选的简化写法(思路完全一致)

如果熟悉数组的filter方法,可以用更简洁的写法,本质和你用for循环的逻辑一样:

function destroyer(arr,...remove) {
    // filter会自动遍历数组,留下所有返回true的元素
    return arr.filter(item => !remove.includes(item));
}

内容的提问来源于stack exchange,提问作者Michelle Stone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:25:58