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

为何JavaScript的filter函数未按预期过滤数组元素?

问题解答

核心原因

JavaScript的filter方法不会修改原数组,它的作用是生成并返回一个过滤后的新数组。你当前的代码只是调用了filter,但没有把返回的新数组赋值给任何变量,所以原数组rId完全没被改动,最后打印的自然还是最初的内容。

修正代码

把filter的返回结果重新赋值给rId(或者新变量)即可得到预期结果:

let rId = requested.map((r) => r._id.toString());
console.log(rId);

let cId = confirmed.map((c) => c._id.toString());
console.log(cId);

// 将过滤后的新数组赋值给rId
rId = rId.filter((r) => !cId.includes(r));
console.log(rId);

额外说明

像filter、map、slice这类数组方法都属于纯函数,它们不会改变原数组,只会返回新的数组实例;而push、pop、splice这类方法才会直接修改原数组本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:10:49