删除包含数字的数组元素

时间:2016-12-23 00:39:11

标签: javascript p5.js

我在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)

2 个答案:

答案 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阵列功能的广泛使用,我觉得你可以简化这一点。

&#13;
&#13;
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;
&#13;
&#13;