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

我的JavaScript removeFromArray函数为何无法通过多值删除测试?

问题分析:removeFromArray多值删除失败原因及修复

你写的removeFromArray函数单值删除测试通过,但多值删除失败,核心问题确实在if语句的判断逻辑上。

你的代码

const removeFromArray = function(array,...toDelete) {
    const newArray=[];

    array.forEach(item=>{
        if(item != toDelete){
            newArray.push(item);
        }
    })
    return newArray; 
};

// Do not edit below this line 
module.exports = removeFromArray;

测试用例

describe('removeFromArray', () => {
  test('removes a single value', () => {
    expect(removeFromArray([1, 2, 3, 4], 3)).toEqual([1, 2, 4]);
  });
  test('removes multiple values', () => {
    expect(removeFromArray([1, 2, 3, 4], 3, 2)).toEqual([1, 4]);
  });
});

问题原因

你用了...toDelete剩余参数语法,它会把传入的所有要删除的值打包成一个数组,而不是单个值。当前的item != toDelete是拿数组元素和整个toDelete数组做比较,这完全不符合逻辑:

  • 单值测试时,toDelete是[3],item != [3]因为类型不匹配(数字 vs 数组),碰巧让你通过了测试,但逻辑本身是错误的。
  • 多值测试时,toDelete是[3,2],任何item和这个数组比较都不会相等,所以所有元素都会被保留,自然无法通过测试。

修复方法

把判断逻辑改成检查当前item是否存在于toDelete数组中,用Array.includes()方法就能轻松实现:

修复后的forEach版本

const removeFromArray = function(array,...toDelete) {
    const newArray=[];

    array.forEach(item=>{
        if(!toDelete.includes(item)){
            newArray.push(item);
        }
    })
    return newArray; 
};

更简洁的filter版本

const removeFromArray = function(array,...toDelete) {
    return array.filter(item => !toDelete.includes(item));
};

说明

toDelete.includes(item)会判断toDelete数组里是否包含当前item,返回布尔值。加上!表示:当item不在要删除的列表里时,就把它加入结果数组(或保留在filter的结果中)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:55:00