Javascript 如果在数组中不匹配,请从字符串中删除字符串

Javascript 如果在数组中不匹配,请从字符串中删除字符串,javascript,Javascript,我试图在一个数组上循环,该数组包含我希望与输入字符串进行比较的字符串。所以方法是我在一个输入字符串上循环,检查每个字符是否与数组中的一个元素匹配。如果不是,则仅用“”替换该字符。注意:正则表达式实际上不是一个选项 下面是我的JavaScript的样子 var input = 'this is A [{}].-_+~`:; *6^123@#$%&*()?{}|\ '; input.toLowerCase(input) var allowed = ['0','1','2','3','4',

我试图在一个数组上循环,该数组包含我希望与输入字符串进行比较的字符串。所以方法是我在一个输入字符串上循环,检查每个字符是否与数组中的一个元素匹配。如果不是,则仅用“”替换该字符。注意:正则表达式实际上不是一个选项

下面是我的JavaScript的样子

var input = 'this is A [{}].-_+~`:; *6^123@#$%&*()?{}|\ ';
input.toLowerCase(input)

var allowed = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d', 'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','s','à','â','ä','è','é','ê','ë','î','ï','ô','œ','ù','û','ü','ÿ','ç','À','Â','Ä','È','É','Ê','Ë','Î','Ï','Ô','Œ','Ù','Û','Ü','Ÿ','Ç', ' '] 

var cleanStr = '';
for(var i = 0; i < input.length; i++){
    for(var j = 0; j< allowed.length; j++){
    if(input[i] !== allowed[j]){
        cleanStr = input.replace(input[i], ' ');
      console.log(cleanStr);
    }
  }
}
var input='这是一个[{}].-\u+~`*6^123@#$%&*()?{}|\ ';
input.toLowerCase(输入)
“6”、“7”、“7”、“8”、“8”、“8”、“8”、“9”、“9”、“9”、“7”、“7”、“8”、“8”、“9”、“9”、“8”、“9”、“8”、“9”、“9”、“a”、“a”、“a”、“a”、“b”、“b”、“c”、“c”、“c”、“a”、“c”、“c”、“d”、“d”、“1”、“1”、“1”、“1”、“1”、“2”、“3”、“3”、“5”、“5”、“5”、“6”、“6”、“7”、“7”、“7”、“7”、“7”、“7”、“7”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“9”、“9”、“9”、“9”、“9”、“9”、“9”、“9”、“8”、“9”、“9”、“9”、“9”、“9”、“,”,”,”,”,”,”,”,”,”,”,”这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”r,“r,“r”、“r”、“们们,”,”,”,”,”这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”这些,“这些,“这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”ÿ、ÿ、À、Ä、È、Ê、Ë、Î、Ï、Ô、Œ、Ù、Û、Ü、Ÿ、Ÿ、']
var cleanStr='';
对于(变量i=0;i
控制台日志输出似乎与输入字段没有任何不同。我错过了什么

这是我的小提琴


您可以在单个循环中完成此操作

var input='这是一个[{}].-\u+~`*6^123@#$%&*()?{}|\ ';
input=input.toLowerCase();//注意这里的语法
允许的变量=[0',1',2',3',4',5',6',7',8',9',a',b',c',d',e',f',g',h',i',j',k',l',m',n',o',p',q',r',s',t',u',v',w',x',y',z',a',Ăăăÿăÿÿāāāāāāāāāāāāāāāāā,'Û', 'Ü', 'Ÿ', 'Ç', ' '];
var cleanStr='';
//循环字符串中的每个字符

对于(var i=0;i您可以在单个循环中执行此操作

var-input='这是一个[{}].-\+~`:*6^123@$%&*()?{}\';
input=input.toLowerCase();//注意这里的语法
允许的变量=[0',1',2',3',4',5',6',7',8',9',a',b',c',d',e',f',g',h',i',j',k',l',m',n',o',p',q',r',s',t',u',v',w',x',y',z',a',Ăăăÿăÿÿāāāāāāāāāāāāāāāāā,'Û', 'Ü', 'Ÿ', 'Ç', ' '];
var cleanStr='';
//循环字符串中的每个字符
对于使用ES6类的(var i=0;i,可在以下网站获得:

最后一行使用有效的
Set
查找操作来确定是否允许使用该字符

[].map.call(input,…)
允许
Array.prototype.map
函数直接对输入字符串进行操作。由于结果是一个数组,因此需要将其
连接到一起

在算法复杂性方面,这使用了两个
O(n)
数组操作和
n
设置查找-我不知道它们有多复杂,但可能是
O(logn)
或者甚至
O(1)
,这取决于实现

当然,创建初始
也需要计算成本,但这很简单,应该只做一次,例如在程序启动时

如果您确实想删除不匹配的字符,可以使用
.filter
而不是
.map

let cleanStr = [].filter.call(input, c => allowed.has(c)).join('');
使用ES6的类,可在以下位置获得:

最后一行使用有效的
Set
查找操作来确定是否允许使用该字符

[].map.call(input,…)
允许
Array.prototype.map
函数直接对输入字符串进行操作。由于结果是一个数组,因此需要将其
连接到一起

在算法复杂性方面,这使用了两个
O(n)
数组操作和
n
设置查找-我不知道它们有多复杂,但可能是
O(logn)
或者甚至
O(1)
,这取决于实现

当然,创建初始
也需要计算成本,但这很简单,应该只做一次,例如在程序启动时

如果您确实想删除不匹配的字符,可以使用
.filter
而不是
.map

let cleanStr = [].filter.call(input, c => allowed.has(c)).join('');

好的,代码的问题是,每次循环检查输入的元素是否允许时,您都会将
cleanStr
分配给输入,只将该字符更改为空字符串元素。请记住,在每个循环中,您的输入总是相同的,
clearStr
是您上次替换的结果是的。所以你实际上放弃了到目前为止所做的每一次替换,在计算结束时,你将得到只包含最后一次替换的输入字符串。你要做的是以增量方式构建结果字符串,以便在循环结束时得到你期望的结果

var input = 'this is A [{}].-_+~`:; *6^123@#$%&*()?{}|\ ';
input.toLowerCase(input)

var allowed = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d', 'e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','s','à','â','ä','è','é','ê','ë','î','ï','ô','œ','ù','û','ü','ÿ','ç','À','Â','Ä','È','É','Ê','Ë','Î','Ï','Ô','Œ','Ù','Û','Ü','Ÿ','Ç', ' '] 

var cleanStr = '';
for(var i = 0; i < input.length; i++){
  if(allowed.indexOf(input[i]) !== -1){
        cleanStr += input[i];
  }
}

console.log(cleanStr);
var-input='这是一个[{}].-\+~`:*6^123@$%&*()?{}\';
input.toLowerCase(输入)
“6”、“7”、“7”、“8”、“8”、“8”、“8”、“9”、“9”、“9”、“7”、“7”、“8”、“8”、“9”、“9”、“8”、“9”、“8”、“9”、“9”、“a”、“a”、“a”、“a”、“b”、“b”、“c”、“c”、“c”、“a”、“c”、“c”、“d”、“d”、“1”、“1”、“1”、“1”、“1”、“2”、“3”、“3”、“5”、“5”、“5”、“6”、“6”、“7”、“7”、“7”、“7”、“7”、“7”、“7”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“8”、“9”、“9”、“9”、“9”、“9”、“9”、“9”、“9”、“8”、“9”、“9”、“9”、“9”、“9”、“,”,”,”,”,”,”,”,”,”,”,”这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”r,“r,“r”、“r”、“们们,”,”,”,”,”这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”这些,“这些,“这些,”,”,”,”,”,”,”,”,”,”,”,”,”,”,”ÿ、ÿ、À、Ä、È、Ê、Ë、Î、Ï、Ô、Œ、Ù、Û、Ü、Ÿ、Ÿ、']
var cleanStr='';
对于(变量i=0;i
我认为对你来说,理解错误是很重要的。除了你可以使用js的一些内置函数来避免这样一个简单任务的双for循环之外。尽管很多人认为正则表达式会更有效。

好的,所以问题是