使用filter按属性过滤对象数组后仍返回未过滤原数组问题求解
问题根因
Array.prototype.filter()属于不会修改原数组的纯方法,只会返回符合过滤规则的新数组,你当前的代码没有接收这个返回值,因此原数组不会发生任何变更,打印结果自然和初始长度一致。- 代码存在变量拼写错误:调用filter方法时写的是
this.currenies,和你后续打印的this.currencies拼写不一致,若实际项目中存在该拼写问题,也会导致过滤逻辑完全不生效。
修正代码
将filter的返回值赋值给对应变量即可,示例如下:
if (payment == Payment.CREDIT_CARD) { // 接收filter返回的新数组,同时修正变量拼写 this.currencies = this.currencies.filter((currency: Currency) => currency.isFromEurope === true); console.log(this.currencies) }
补充说明
如果需要保留完整的原始数组数据,可以单独声明新变量存储过滤结果,避免覆盖原始数据:
if (payment == Payment.CREDIT_CARD) { // 布尔值属性可以直接作为判断条件,无需额外 === true const europeCurrencies = this.currencies.filter((currency: Currency) => currency.isFromEurope); console.log(europeCurrencies) }
内容的提问来源于stack exchange,提问作者user2004
相关产品推荐
相关产品推荐

