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