将绕过尝试与字符串j​​avascript

问题描述

从问题的名称来看,这似乎很容易,但是对我来说是初学者。我需要做的是将一个字符串(用户输入,我已经有了)与单词列表进行比较。基本上,如果用户输入了bluuexel,我仍然希望程序将其解释为蓝色(实际上是使机器人自动检查文字,而只是输入随机内容是绕过检查器的常见策略)。我本来打算对重复项进行排序和删除,但后来我意识到“ ass”将变为“ as”,并且该策略将不再适用。

解决方法

对于分析字符串,您可以使用String.prototype.includes来查看子字符串是否位于字符串中或其他选项(例如正则表达式)是否完全匹配。可以采用许多方法,但是此示例可能使您入门。 String.prototype.includes

要替换其他字符串,请使用诸如String.prototype.replace之类的东西。 String.prototype.replace

由于您还在Node.js下标记了此帖子,因此可以从命令提示符处接收用户输入。使用可以使用Node.js readline模块。 Readline

当心比较item.value == search可能还会导致意外的类型强制。这就是为什么我们使用====

注意

您的问题有点宽泛,但是您似乎正在尝试将字符串与其他字符串进行比较。它将有助于提供一些代码,以便我们了解您要完成的工作。

var items = [{
    value: "one"
  },{
    value: "bluuexel"
  }
]

// Accept a search string term variable
unique = (search) => {
  // Iterate through the object items
  // Some: Determines whether the specified callback function
  // returns true for any element of an array.
  return items.some(item => {
    // Return if item.value is equal to the search string,beware of 
    // Comparison item.value == search may cause unexpected type 
    // coercion. So we use ===
    return item.value === search
  });
};

// Accept a search string term variable
contains = (search) => {
  // Iterate through the object items
  // Some: Determines whether the specified callback function
  // returns true for any element of an array.
  return items.some(item => {
    // Includes: Returns true if searchString
    // appears as a substring of the result of converting
    // this object to a String,at one or more positions that
    // are greater than or equal to position; otherwise,returns false.
    // Return if item.value contains equal to the search string
    return item.value.includes(search)
  });
};

console.log('Unique:',unique('bluuexel'),'=> bluuexel');
console.log('Contains:',contains('bluu'),'=> bluu');
console.log('Contains:',contains('bluu2'),'=> bluu2');
console.log('Unique:',unique('one'),'=> one');
console.log('Unique:',unique('one2'),'=> one2');

现在用于从数组或重复项中删除单词,还有许多其他方法。但这是一个简单的例子。

我们还利用Spread syntax (...)允许在短期内扩展诸如数组表达式或字符串之类的可迭代对象。 Spread

使用Set构造函数,您可以创建Set对象,该对象存储任何类型的唯一值,无论是原始值还是对象引用。 Set

// Defined list of an array of words
let words = ['bluuexel','bluuexel2','bluuexel'];
// ... Spread operator to iterate over array elements in array "words"
console.log('Removed (Duplicates)',words);
let removed = [...new Set(words)];
// Output unique only words,from new array named "removed"
console.log('Removed (Non Duplicates)',removed);

将其放在一起以删除一些禁止的单词,也删除重复的单词。

// Filtering words and duplicates

// Word List
let words = [ 'one','one','two','two2','ass','as']

// Banned Words
let banned = ['ass']

// Contains word,accepts a string and a list as an array
contains = (search,list) => {
  // Determine if the list has a string
  return list.some(item => {
    return item.includes(search)
  });
};

// Function for filtering,and removing duplicates and banned words
function filter() {
  // Remove duplicates first,update word list
  words = [...new Set(words)];
  // Iterate through banned word list
  banned.forEach((word) => {
    // Output that banned word was found
    console.log('Found Banned (Word):',word)
    if (contains(word,words)) {
        // Update final word list
        words.splice(words.indexOf(word),1);
    }
  })
}

console.log('Previous Results',words)
// Run filter function
filter()
// Output results
console.log('Final Results',words)