Javascript 从一个字符串中过滤另一个字符串中的单词

Javascript 从一个字符串中过滤另一个字符串中的单词,javascript,if-statement,filter,Javascript,If Statement,Filter,伙计们。我对JavaScript非常陌生,只想问一下如何从字符串1中过滤字符串2的单词 string1 = ['mango', 'iPhone', 'banana', 'computer', 'apple', 'keyboard', 'strawberry']; string2 = ['mango', 'banana', 'apple', 'strawberry']; const string3 = string1.filter(if (word) {}) 这就是我到目前为止的表现。我不太

伙计们。我对JavaScript非常陌生,只想问一下如何从字符串1中过滤字符串2的单词

string1 = ['mango', 'iPhone', 'banana', 'computer', 'apple', 'keyboard', 'strawberry'];
string2 = ['mango', 'banana', 'apple', 'strawberry'];


const string3 = string1.filter(if (word) {})
这就是我到目前为止的表现。我不太确定在filter()方法中写什么。(1) 我想说,如果字符串1的单词与字符串2的单词匹配,(2),那么我想排除它们(3),我想把其余的单词存储在字符串3中


如果有其他方法可以达到同样的效果,我们也会很感激。

确保变量名没有空格
filter
将函数作为参数,并返回在运行该函数时返回true的所有元素

string1=['mango','iPhone','banana','computer','apple','keyboard','草莓']
string2=['芒果'、'香蕉'、'苹果'、'草莓']
string3=string1.filter(函数(字){
返回(!string2.includes(word))
})

console.log(string3)
通过检查数组string2中元素的位置来过滤数组string1:

string3 = string1.filter(function(val) {
 return string2.indexOf(val) == -1;
});

你可以像这样使用过滤器

const result = string1.filter(word => !string2.includes(word));
如果您想从arr1中删除arr2和arr3的元素,那么我的方法是

array1 = ['mango', 'iPhone', 'banana', 'computer', 'apple', 'keyboard', 'strawberry'];
array2 = ['mango', 'banana', 'apple', 'strawberry'];
array3 = ['1', '2', '3', 'iPhone']

result = array1.filter(word => !(array2.includes(word) || array3.includes(word)));

console.log(result);   // ["computer", "keyboard"]

如果数组大小很大,最有效的方法是从第二个字符串构造一个哈希表(对象),然后根据哈希表中元素的存在情况过滤第一个字符串中的元素

请参阅下面的代码片段。以下算法在
O(m+n)
时间复杂度中运行,其中
m
n
是数组的长度

const string1=['mango'、'iPhone'、'banana'、'computer'、'apple'、'keyboard'、'草莓'];
常量string2=[‘芒果’、‘香蕉’、‘苹果’、‘草莓’];
设obj=Object.fromEntries(string2.map(e=>[e,true]);
设res=string1.filter(e=>!obj[e]);
控制台日志(res)
让s1=[‘芒果’、‘iPhone’、‘香蕉’、‘电脑’、‘苹果’、‘键盘’、‘草莓’];
设s2=[‘芒果’、‘香蕉’、‘苹果’、‘草莓’];
|------------|----------------------------------------------------------|
|香草JS | const diff=(A,B)=>A.filter(x=>B.indexOf(x)<0)|
||让输出=diff(s1,s2)|
|------------|----------------------------------------------------------|
|Ramda | let输出=差(s1,s2)|
|------------|----------------------------------------------------------|
|lodash | let output=u.差(s1,s2)|
|------------|----------------------------------------------------------|

请注意:
过滤器
将函数作为参数-如果您在编辑器中单击
,您将需要一个函数。您可以将此日志制作到页面中的控制台,让每个人都可以看到结果谢谢,我可以再问一个吗?现在我可以从中筛选出一个。从一个字符串中筛选两个字符串中的单词如何<代码>字符串1=['apple','1','iPhone','banana','2','samsung','草莓','3','nokia']字符串2=['apple','banana','草莓']字符串3=['1','2','3']
我应该在这里使用if,还是先将字符串2过滤到字符串4,然后从字符串4过滤字符串3?不确定您的意思。顺便说一句,字符串是一种带有引号的数据类型,例如:
'apple'
是一个字符串。当您看到方括号内有内容时,它被称为数组。示例:
['grapes','spineapple',4,]
您命名的字符串1和字符串2实际上是数组。感谢您的澄清。我想排除字符串1中字符串2和字符串3中的单词,并想得到
array 4=['iPhone','samsung','nokia']
非常确定这是最好的答案。。。因为这就是我要做的:)@Jason这运行在时间复杂度
O(m*n)
中。阵列大小是否巨大很重要。有
O(m+n)
运行时算法是可能的。仅供参考。@RahulBhobe抱歉,这是我的幽默尝试。就性能而言,我想可能有更好/更有效的解决方案,但对于OP来说,它应该已经足够了。嗨,我只想再问一个问题。假设我们有三个数组
array 1=['apple','1','iPhone','banana','2','samsung','grape','3','nokia']array 2=['apple','banana','grape']array 3=['1','2','3']
我想从array 1中排除array 2和array 3,那么您将如何编写代码?
let s1 = ['mango', 'iPhone', 'banana', 'computer', 'apple', 'keyboard', 'strawberry'];
let s2 = ['mango', 'banana', 'apple', 'strawberry'];

|------------|----------------------------------------------------------|
| Vanilla JS | const diff = (A, B) => A.filter( x => B.indexOf(x) < 0); |
|            | let output = diff(s1, s2);                               |
|------------|----------------------------------------------------------|
| Ramda      | let output = difference(s1, s2);                         |
|------------|----------------------------------------------------------|
| lodash     | let output = _.difference(s1, s2);                       | 
|------------|----------------------------------------------------------|