Javascript 删除包含数字的数组元素
我在Stackoverflow上看到了几个答案,但没有一个对我有帮助。我有一个近100000个单词的庞大数组,我正试图删除其中所有包含数字的单词。我使用以下方法来实现此目的:Javascript 删除包含数字的数组元素,javascript,p5.js,Javascript,P5.js,我在Stackoverflow上看到了几个答案,但没有一个对我有帮助。我有一个近100000个单词的庞大数组,我正试图删除其中所有包含数字的单词。我使用以下方法来实现此目的: for(var i = 0; i < words.length; i++){ if (hasNumbers(words[i]) { words.splice(i, 1); } function hasNumbers(t) { return /\d/
for(var i = 0; i < words.length; i++){
if (hasNumbers(words[i]) {
words.splice(i, 1);
}
function hasNumbers(t)
{ return /\d/.test(t); }
for(变量i=0;i
它似乎有效,但并非一直有效,因为我仍然会得到包含数字的单词。我可以做些什么来让它删除所有包含数字的单词
(我在我的js中使用p5.js)这是因为当你在索引I中删除一个单词时,下一个单词将有索引I,但你仍然增加了I,从而跳过了一个你从未检查过的单词 要解决此问题,您可以反向浏览阵列:
for(var i = words.length - 1; i >= 0; i--){
// etc.
以下是删除带数字的单词的较短方法:
words = words.filter(a => !hasNumbers(a));
最后,您真的应该调用第二个函数hasdights而不是hasNumbers。单词“digit”和“number”的含义略有不同
下面是一个使用ES6语法的代码段,它定义了相反的函数HasNodeDigits,并将其应用于一些示例数据:
让words=['abcd'、'ab0d'、'4444'、'-)#'、'&9µ*';
设hasNoDigits=s=>/^\D*$/.test;
console.log(words.filter(hasNoDigits));
我开始写这篇文章,然后trincot回答了。他的回答是正确的,不过随着ES5数组函数的广泛使用,我觉得你可以将它简化很多
window.addEventListener('load',function(){
风险值数据=[
“w3.org”,
"google.com",,
'0001118.com'
]这应该是你的数据,我没有,所以我编的。
var no_nums=data.filter(函数(项){
//根据正则表达式测试每个字符串,反转值(false变为true,true变为false)
返回!/\d/.test(项目);
});
var results=document.getElementById('results');
无任何费用(功能(项目){
results.innerHTML+=item+'
';
//循环遍历每个新数组以添加项,以便我们可以看到它。
});
});
我从未使用过p5,但仅使用纯javascript我没有遇到同样的错误。如果你能避免的话,不要将p5拼接成一个循环。它有太多的开销。用它来决定要保留哪些单词。你是老板,谢谢你!这是一个让我感到不快的错误。谢谢,我修复了那个拼写错误。我只是简化了我在上面共享的代码中遇到了问题。提示:words.filter(hasNumbers)
保留了错误的值集,即包含数字的值集。我会在这里使用一个小实用程序:let not=fn=>v=>!fn(v);
和words.filter(not(hasNumbers))
谢谢@Thomas!那let
的内容到底是什么?我不知道那里发生了什么。@MichaelReaderlet
是var
的一个块范围版本,其后面的部分称为胖箭头=>
,是编写函数的一种简写方式。