我在Stackoverflow上看到了几个答案,但没有人帮助过我。我有大量近100,000个单词,其中我试图删除包含数字的所有单词。我使用以下内容来做到这一点:
for(var i = 0; i < words.length; i++){
if (hasNumbers(words[i]) {
words.splice(i, 1);
}
function hasNumbers(t)
{ return /\d/.test(t); }
它似乎有效,但不是所有时间,因为我仍然得到包含数字的单词。我可以更改什么来删除包含任何数字的所有单词?
(我和我的js一起使用p5.js)
答案 0 :(得分:4)
那是因为当您在索引 i 中删除单词时,下一个单词将具有索引 i ,但您仍然会增加 i ,从而跳过一个你从未检查过的词。
要解决此问题,您可以向后搜索数组:
for(var i = words.length - 1; i >= 0; i--){
// etc.
以下是删除数字字词的简短方法:
words = words.filter(a => !hasNumbers(a));
最后,你真的应该调用你的第二个函数 hasDigits 而不是 hasNumbers 。 “数字”和“数字”这两个词的含义略有不同。
这是一个使用ES6语法的代码片段,它定义了相反的函数 hasNoDigits 并将其应用于某些示例数据:
let words = ['abcd', 'ab0d', '4444', '-)#', '&9µ*'];
let hasNoDigits = s => /^\D*$/.test(s);
console.log(words.filter(hasNoDigits));
words = words.filter(a => !hasNumbers(a));
答案 1 :(得分:-1)
我开始写这篇文章,然后trincot回答。他的答案是正确的,尽管随着ES5阵列功能的广泛使用,我觉得你可以简化这一点。
is
&#13;
window.addEventListener('load', function() {
var data = [
'w3.org',
'google.com',
'00011118.com'
]; //This is supposed to be your data, I didn't have it so I made it up.
var no_nums = data.filter(function(item) {
//Tests each string against the regex, inverts the value (false becomes true, true becomes false)
return !/\d/.test(item);
});
var results = document.getElementById('results');
no_nums.forEach(function(item) {
results.innerHTML += item + '<br />';
//Loops through each of our new array to add the item so we can see it.
});
});
&#13;