删除包含数字的数组元素
Removing array elements that contain a number
我在 Whosebug 上看到了几个答案,但 none 对我有帮助。我有近 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)
那是因为当你在索引 i 处删除一个词时,下一个词的索引将是 i,但你仍然增加 i,从而跳过一个你从未检查过的词。
要解决这个问题,您可以向后遍历数组:
for(var i = words.length - 1; i >= 0; i--){
// etc.
这是删除带数字的单词的更短方法:
words = words.filter(a => !hasNumbers(a));
最后,你真的应该调用你的第二个函数 hasDigits 而不是 hasNumbers。 "digit" 和 "number" 这两个词的含义略有不同。
这是一个使用 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));
我已经开始写这个了,然后 trincot 回答了。他的回答是正确的,尽管随着 ES5 数组函数的流行和广泛使用,我觉得你可以把它简化很多。
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.
});
});
<div id="results">
</div>
我在 Whosebug 上看到了几个答案,但 none 对我有帮助。我有近 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)
那是因为当你在索引 i 处删除一个词时,下一个词的索引将是 i,但你仍然增加 i,从而跳过一个你从未检查过的词。
要解决这个问题,您可以向后遍历数组:
for(var i = words.length - 1; i >= 0; i--){
// etc.
这是删除带数字的单词的更短方法:
words = words.filter(a => !hasNumbers(a));
最后,你真的应该调用你的第二个函数 hasDigits 而不是 hasNumbers。 "digit" 和 "number" 这两个词的含义略有不同。
这是一个使用 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));
我已经开始写这个了,然后 trincot 回答了。他的回答是正确的,尽管随着 ES5 数组函数的流行和广泛使用,我觉得你可以把它简化很多。
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.
});
});
<div id="results">
</div>