如何用JavaScript/jQuery过滤数组单条数据?移除元素失败求助
问题:使用
filter移除数组元素"3"未生效的原因及解决办法 你碰到的这个问题其实是JavaScript里很常见的类型匹配坑!先看看你的代码:
var auditorListValue = ["", "1", "2", "3", "4"]; var oldAuditGroupId = 3; var auditorListValue = auditorListValue.filter(function (item) { return item !== oldAuditGroupId; }); console.log(auditorListValue);
问题根源
你的数组auditorListValue里的所有元素都是字符串类型(比如"3"是带引号的字符串),但oldAuditGroupId是数字类型的3。JavaScript中的!==是严格相等运算符,会同时检查值和数据类型是否完全一致——字符串"3"和数字3类型不同,所以item !== oldAuditGroupId的结果始终是true,自然不会把"3"过滤掉。
两种解决办法
方法1:统一类型(推荐,符合严格相等的最佳实践)
把oldAuditGroupId转换成字符串,或者在判断时将数字转为字符串:
// 方案A:直接定义为字符串 var oldAuditGroupId = "3"; var auditorListValue = auditorListValue.filter(item => item !== oldAuditGroupId); // 方案B:在filter中转换类型 var oldAuditGroupId = 3; var auditorListValue = auditorListValue.filter(item => item !== String(oldAuditGroupId));
方法2:使用非严格相等运算符
如果不想修改类型,可以用!=(非严格相等,会自动隐式转换类型):
var auditorListValue = auditorListValue.filter(item => item != oldAuditGroupId);
验证效果
修改后运行代码,console.log(auditorListValue)会输出["", "1", "2", "4"],正好符合你移除"3"的需求。
以后遇到filter不生效的情况,先检查判断条件里的变量类型是否一致,这能帮你快速定位问题哦!
内容的提问来源于stack exchange,提问作者ashwin
相关产品推荐
相关产品推荐

