问题描述
从问题的名称来看,这似乎很容易,但是对我来说是初学者。我需要做的是将一个字符串(用户输入,我已经有了)与单词列表进行比较。基本上,如果用户输入了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)