javascript - 奇怪的 JavaScript 代码

标签 javascript

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

然后设置 a = a.substring(0, 4) + a.substring(5)。调用 substring 包含在第一个索引中但不包含在最后一个索引中,这意味着在这种情况下 a = "xyz"+ "yz",所以我们删除了从字符串中复制 "x"

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


一如既往地遇到这种事情,应用extract 方法重构 将是使代码更清晰的好方法。 (甚至比评论它更好!)因此,如果您只是将其提取到一个方法中,代码可能会变成 a = removeDuplicateChars(a),每个人都会更开心。

关于javascript - 奇怪的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6624499/

相关文章:

javascript - 即使不滚动,我也可以在 iPad 上显示滚动条吗?

javascript - 返回对象时出错

javascript - ESRI JavaScript setRequestPreCallback 部分工作

javascript - Dart 和第三方库集成

javascript - Javascript 中的 break 语句

Javascript 或 Jquery 数学函数

javascript - HTML 电影播放器​​在最新的 Safari 上无法运行

javascript - Mobile Safari 和 iFrame src 属性

javascript - 按钮点击调用PHP函数

javascript - React 如何检测内部组件的变化?