我正在研究一些代码问题,我来到这个'去除噪音的事情',我想重点是逃避反斜杠\并使用替换方法,这很容易.但我不想使用替换,而是发现自己在尝试使用拼接方法删除项目时遇到了麻烦.
有趣的是,当我在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'); //=> $/·|ªlloRun Code Online (Sandbox Code Playgroud)
您正在使用splice,以除去从数组项,但你再递增i为下一个循环.如果从10条目数组中删除索引5处的条目,则索引6处的条目现在位于索引5(现在是9条目数组),因此您不希望增加索引.
解决方案是使用while循环,只有i在您不这样做 时才更新splice:
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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |