拼接未删除某些字符
Splice NOT removing certain characters
我正在处理一些代码战争问题,我想到了这个"去除噪音的东西",我想重点是转义反斜杠''并使用replace方法,这很容易。但我不想使用替换,相反,我发现自己在尝试用拼接方法删除项目时遇到了麻烦。
有趣的是,当我在Chrome开发工具中调试时,我一步一步地看到项目被删除,但console.log吐出某些有问题的字符($/·|ªl)来删除,最后返回并与这些字符连接。为什么?
function removeNoise(str) {
var base = "%$&/#·@|º'ª";
var arr = str.split('');
for(var i = 0; i < arr.length; i++) {
var item = arr[i];
var condition = base.indexOf(item);
if(condition + 1) {
//works like a charm
//arr[i] = '';
arr.splice(i,1);
//this thing wont work
//when debugging it removes the items from the array
//console log print no removing
}
}
return arr.join('');
}
removeNoise('he%$&/#·@|º'ª'llo'); //=> $/·|ªllo
您使用splice
来从数组中删除条目,但随后会为下一个循环递增i
。如果从10个条目的数组中删除索引5处的条目,那么索引6处的条目现在位于索引5(现在是9个条目的阵列),因此您不想增加索引。
解决方案是使用while
循环,并且仅在不splice
:的情况下更新i
function removeNoise(str) {
var base = "%$&/#·@|º'ª";
var arr = str.split('');
var i = 0;
while (i < arr.length) {
var item = arr[i];
var condition = base.indexOf(item);
if (condition + 1) {
// Remove this entry, reuse same value for 'i'
arr.splice(i,1);
} else {
// Don't remove this entry, move to next
++i;
}
}
return arr.join('');
}
var result = removeNoise('he%$&/#·@|º'ª'llo');
var pre = document.createElement('pre');
pre.appendChild(
document.createTextNode(result)
);
document.body.appendChild(pre);
您正在从数组中删除字符。这将使索引器变量i
与要测试的字符不同步。简单的修复方法是从数组的末尾开始,一直到开头。
将for循环更改为此。
for(var i = arr.length -; i <= 0; i--) {
function removeNoise(str) {
var base = "%$&/#·@|º'ª";
var arr = str.split('');
for(var i = arr.length - 1; i <= 0 ; i--) {
var item = arr[i];
if(base.indexOf(item) >= 0) {
//remove the offending character
arr.splice(i,1);
}
}
return arr.join('');
}
removeNoise('he%$&/#·@|º'ª'llo'); //=> $/·|ªllo
相关文章:
- angularjs删除动态形式元素中的特殊字符
- 拼接未删除某些字符
- 删除图形和数字之间的连字符(-)符号
- 删除单引号字符转义
- 用于在Javascript中删除多个空格的特殊字符
- 如何删除“;反向字符顺序“;作用
- Javascript:删除冒号的最后一个字符
- 为什么以下正则表达式不删除 ## 字符
- 如何从拼音编辑器中删除特殊字符
- 如何在单击时从输入字段中删除最后一个字符
- 使用jquery删除href中的特定字符或标记
- 如何删除“"使用javascript从字符串中提取字符
- 如何删除用Range.setStart/setEnd选择的字符
- 为什么jQuery正在删除文本的最后一个字符
- jQuery:从数据属性中删除除前4个字符外的所有字符
- 在粘贴事件Javascript的输入字段中删除所有非数字字符
- 如何删除↵JS字符串中的字符
- 用于删除字符串中字符开头到结尾的正则表达式
- Javascript选项卡字符删除
- 逐个字符删除