Javascript 使用正则表达式从数组中删除字
我正在创建一个程序,其中包括从数组中删除文本。如果数组中的单词中包含字母,则该单词将被删除。我的第一个测试是成功的,它是一个带有小数组的简单正则表达式:Javascript 使用正则表达式从数组中删除字,javascript,arrays,regex,Javascript,Arrays,Regex,我正在创建一个程序,其中包括从数组中删除文本。如果数组中的单词中包含字母,则该单词将被删除。我的第一个测试是成功的,它是一个带有小数组的简单正则表达式: var regex = /z/; var words = ["eggs", "zebras", "lampshade"]; for (i = 0; i < words.length; i++) { let testResult = regex.test(words[i]); if (!testResult) { wor
var regex = /z/;
var words = ["eggs", "zebras", "lampshade"];
for (i = 0; i < words.length; i++) {
let testResult = regex.test(words[i]);
if (!testResult) {
words.splice(i, 1);
}
}
console.log(words);
每次运行它时,它都会返回不符合正则表达式的值。例如,上面的代码返回了
['aa','aahed','aahs',…]作为其前几个值。我是否必须更改代码以处理更大的数组?我犯了一个我没有注意到的愚蠢的错误吗?@Joey,在官方文件中,如果你看到了,试着用这种方式作为解决办法。@Igor Moraru的回答也解释了为什么会发生这种情况
console.log(words.filter(d => /z/.test(d)))
我认为这可能是因为您正在拼接阵列并同时循环阵列
例如,如果数组长度为5,当前索引为2,则在拼接数组后,索引3处的项将移动到索引2,并在下一次迭代中跳过,因为下一个索引将为3
因此,您可以创建单词的克隆并对其进行更改,同时迭代原始数组 你能试试这样用吗?log(words.filter(d=>/z/.test(d)))很高兴听到这个消息!是的,您可以通过尝试以下数组来验证这一点:['a','a','z','a','a']
您将看到['a','z','a'],似乎每个假值都会通过下一个值,不管它是真是假。
console.log(words.filter(d => /z/.test(d)))