如何修改JavaScript代码移除name包含指定字符串的数组元素
修改数组过滤逻辑:从精确匹配到包含匹配
你现在的代码是严格匹配name等于"abc"的元素,要改成检查name是否包含"abc",其实只需要把严格相等的判断换成字符串的includes()方法就行啦。
原代码回顾
原代码通过倒序遍历数组,找到name严格等于"abc"的项并移除:
var i; for (i = result.length; i--;) { if (result[i].name === "abc") { result.splice(i, 1); } }
修改后的代码
把=== "abc"换成includes("abc")即可实现包含匹配:
var i; for (i = result.length; i--;) { if (result[i].name.includes("abc")) { result.splice(i, 1); } }
逻辑说明
includes()方法会检查字符串中是否存在指定子串,只要"abc"是name的一部分(比如"abcd"、"xabc"、"abc"本身),都会返回true,完全符合你的需求。- 倒序遍历的逻辑不用改动,这样在使用
splice移除元素时,不会影响还未遍历到的索引,避免出现漏删或遍历错位的问题。
兼容老浏览器的替代方案
如果需要兼容IE这类不支持includes()的老浏览器,可以用indexOf()替代:
var i; for (i = result.length; i--;) { if (result[i].name.indexOf("abc") !== -1) { result.splice(i, 1); } }
indexOf()会返回子串的起始索引,找不到则返回-1,因此判断结果不等于-1就说明目标子串存在。
验证示例数据
用你给出的result示例:
[{"name": "aaa", "number": "123"},{"name": "abc", "number": "456"},{"name": "abcd", "number": "789"}]
修改后的代码会移除name为"abc"和"abcd"的两个元素,最终result仅剩下{"name": "aaa", "number": "123"}。
内容的提问来源于stack exchange,提问作者albinosilver
相关产品推荐
相关产品推荐

