JS里去除数组中的重复值

看到一个去除数组重复值的方法,不明白其中的判断是怎么进行的。一下代码中的a[d]是个什么东西,为什么判断后要给赋成1.<script>Array.prototype.de... 看到一个去除数组重复值的方法,不明白其中的判断是怎么进行的。一下代码中的a[d]是个什么东西,为什么判断后要给赋成1.
<script>
Array.prototype.del = function() {
var a = {}, c = [], l = this.length;
for (var i = 0; i < l; i++) {
var b = this[i];
var d = (typeof b) + b;
if (a[d] === undefined) {
c.push(b);
a[d] = 1;
}
}
return c;
}
alert([1, 1, 2, 3, 4, 5, 4, 3, 4, 4, 5, 5, 6, 7].del());
</script>
展开
 我来答
马后雷鼓下扬州5058
2013-05-10 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:806万
展开全部

如果你把测试数组简化为 [1, 2, "2", 2, 3],然后在每一步使用 console.log 输出,看得就清楚了

函数中使用 typeof 是为了区别 2 和 “2”(number 和 string)


Array.prototype.del = function() {
    var a = {}, c = [], l = this.length;
    for (var i = 0; i < l; i++) {
        var b = this[i];
        // for 循环第 1 次:1
        // for 循环第 2 次:2
        // for 循环第 3 次:"2"
        // for 循环第 4 次:2
        // for 循环第 5 次:3
        console.log(b);
    
        var d = (typeof b) + b;
    
        // for 循环第 1 次:number1
        // for 循环第 2 次:number2   <--- 重复
        // for 循环第 3 次:string2
        // for 循环第 4 次:number2   <--- 重复
        // for 循环第 5 次:number3
        console.log(d);
    
        // for 循环第 1 次:number1 为 undefined
        // for 循环第 2 次:number2 为 undefined
        // for 循环第 3 次:string2 为 undefined
        // for 循环第 4 次:注意 {} 中已经有了 number2,所以不为 undefined
        // for 循环第 5 次:number3 为 undefined
        console.log(a[d]);
    
        // a[d] 代表将 d 设为 a 的属性,例如 a = {number2},但没有值
        if (a[d] === undefined) {
            // 1, 2, "2", 3 被 push
            c.push(b);
    
            // 这里 = 1 只是给此属性一个值,例如 a = {number2: 1}
            a[d] = 1;
    
            // for 循环第 1 次:{number1=1}
            // for 循环第 2 次:{number1=1, number2=1}
            // for 循环第 3 次:{number1=1, number2=1, string2=1}
            // for 循环第 4 次:因为 number2 存在,此次被忽略
            // for 循环第 5 次:
            //      {number1=1, number2=1, string2=1, number3=1}
            console.log(a);
        }
    }
    return c;
}
    
alert([1, 2, "2", 2, 3].del());
更多追问追答
追问
随着循环进行,a的属性是不断变化的还是包含了之前所有的属性?
追答
a 的属性是累加的,也就是变化的,会包含之前添加的属性

第 1 次添加属性 number1
第 2 次添加属性 number2
第 3 次添加属性 string2
第 4 次 因为 a 已经有了属性 number2,也就是重复的数字 2,所以被忽略
第 5 次添加属性 number3

循环结束的时候
a = {number1:1, number2:1, string2:1, number3:1}
c = [1, 2, "2", 3];

a 的四个属性值都为1,这个 1 没有什么实际意义,只是为了完整对象,有属性,有值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式