奇怪的JavaScript代码

Weird JavaScript Code

本文关键字:代码 JavaScript      更新时间:2023-09-26
for (var i=a.length-1;i>0;i--) {
    if (i!=a.indexOf(a.charAt(i))) {
        a=a.substring(0,i)+a.substring(i+1);
    }
}

我在一个正在审核的网络应用程序中发现了这个,它让我很困惑为什么会在那里。我似乎看不出i!=a.indexOf(a.charAt(i))为假的情况。

传递给它的值是:

a = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

也没有任何评论//叹息

对于重复的字符来说,这是正确的,因为indexOf会找到字符串的第一个索引,并且您是从末尾开始搜索的。示例:

var a = "xyzxyz";

在第一次迭代中,i === 4a.charAt(4) === "x"a.indexOf("x") === 0。所以4 !== 0

然后设置CCD_ 7。在substring处调用在第一个索引中包含,但在最后一个索引中排除,这意味着在本例中为a = "xyz" + "yz",因此我们从字符串中删除了重复的"x"

由于循环向后遍历,即使对于重复多次的字符,这也将继续有效;您可以看到部分a.substring(i + 1)将始终被算法覆盖,即不包含任何重复。


和往常一样,当遇到这种类型的事情时,应用提取方法重构将是使代码更清晰的好方法。(甚至比注释它更好!(所以,如果你把它拉到一个方法中,代码可能会变成a = removeDuplicateChars(a),每个人都会更高兴。