检查数组中的部分匹配

我有一个JavaScript数组,其中包含一些在请求创建用户帐户时无法使用的单词。

我试图循环所请求的帐户并检查它们对文字filter。 如果它们包含任何单词,则该值将移动到“无效帐户”数组。

// Create our arrays var blacklist = ["admin", "webform", "spoof"]; var newAccounts = ["admin1@google.com", "interweb@google.com", "puppy@google.com"]; var invalidAccounts = []; // I need to check if any of the new accounts have matches to those in the blacklist. // admin1@google.com would need to be pushed into the invalidAccounts array because it // contains the word admin. Although interweb contains the word web, it does not contain // the full word, webform, so should be ignored. // Loop over the blacklist array for(var x = 0; x  -1){ alert(blacklist[x] + " is in the blacklist array"); // Push the newAccounts value into the invalidAccounts array since it contains // a blacklist word. } else { alert('no matches'); } } 

在上面的代码中我需要更改什么才能使它与所提到的部分字符串匹配?

以上代码的小提琴: https : //jsfiddle.net/1qwze81o/

您可能不需要使用所有这些,但它应该是有帮助的:

 var blacklist = ["admin", "webform", "spoof"]; var newAccounts = ["admin1@google.com", "interweb@google.com", "puppy@google.com"]; var invalidAccounts = []; // transform each email address to an object of the form: // { email: string, valid: boolean } var accountObjects = newAccounts.map(function (a) { return { email: a, valid: true }; }); // loop over each account accountObjects.forEach(function (account) { // loop over the blacklisted terms blacklist.forEach(function (blacklisted) { // check to see if your account email address contains a black listed term // and set the valid property accordingly account.valid = account.email.search(blacklisted) === -1; }); }); // filter accountObjects, validAccounts will now contain an array of valid objects var validAccounts = accountObjects.filter(function (a) { return a.valid; }); // back to the original type of a string array var validEmailAddresses = validAccounts.map(function (a) { return a.email; }); 

我们需要两个循环来实现这一点:如下所示:

  // Loop over the blacklist array for(var j = 0; x < newAccounts.length; j++){ for(var x = 0; x < blacklist.length; x++){ if(newAccounts[j].indexOf(blacklist[x]) > -1){ alert(blacklist[x] + " is in the blacklist array"); // Push the newAccounts value into the invalidAccounts array since it contains a blacklist word. }else{ alert('no matches'); } } } 

我修了一些东西……

 for (var x = 0; x < newAccounts.length; x++) // loop through new accounts { // for every account check if there is any match in blacklist array for (var y = 0; y < blacklist.length; y++) { // if there is match do something if (newAccounts[x].indexOf(blacklist[y]) > -1) { alert(newAccounts[x] + " is in the blacklist array"); break; } } } 

使用javascript数组本机函数的解决方案:

 var invalidAccounts = newAccounts.filter(function(account){ // we need to filter accounts return blacklist.some(function(word){ // and return those that have any of the words in the text return account.indexOf(word) != -1 }) }); 

有关更多信息: Array.filter和Array.some

这是小提琴: https //jsfiddle.net/swaprks/n1rkfuzh/

JAVASCRIPT:

 // Create our arrays var blacklist = ["admin", "webform", "spoof"]; var newAccounts = ["admin1@google.com", "interweb@google.com", "puppy@google.com"]; var invalidAccounts = []; for(var x = 0; x < newAccounts.length; x++){ for(var y = 0; y < blacklist.length; y++){ if( newAccounts[x].indexOf(blacklist[y]) > -1){ alert(blacklist[x] + " is in the blacklist array"); // Push the newAccounts value into the invalidAccounts array since it contains // a blacklist word. invalidAccounts.push(newAccounts[x]); }else{ alert('no matches'); } } }