拼命二郎 2015-05-19 02:27 采纳率: 100%
浏览 1779
已采纳

数组去重的问题 为什么o[v]=1

请问,循环之后的if判断力,o[v]=1,是什么意思?谢谢。

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>

<script type="text/javascript">

var arr=[1 ,1 ,2, 3, 3, 2, 1];
Array.prototype.unique=function(){          //unique应该是自定义的,这个是往数组原型上添加一个函数(属性),以后各个你定义的数组都可以直接使用这个函数(属性)
    var ret=[];
    var o={};
    var len=this.length;
    for(var i=0; i<len; i++){
        var v=this[i];
        if(!o[v]){
            o[v]=1;
            ret.push(v);
        }
    }
    return ret;
}

alert(arr.unique());

</script>

</head>

<body>

</body>
</html>

  • 写回答

8条回答 默认 最新

  • O溺水的鱼0 2015-05-19 02:41
    关注

    要明白这几个数组的作用就知道为什么设置o[v]=1 了。
    ret这个数组很明白,是存放结果用的。
    了解o这个数组,需要关注for循环中,v这个值是获取到输入数组的值(i是输入数组的索引),所以v的取值依次是“1 ,1 ,2, 3, 3, 2, 1”,在if判断中,如果某个数被添加到ret中了,则在o这儿数组中做个标识,表示该数下次不用记入ret数组,也就是重复数组。

    比如:取第一个1的时候,o数组为空,所以进入if条件,if执行完成后,o中存储的是1==>1,下次再取到v为1时,o[1]=1,所以不满足if条件,所以就不会再向ret数组中压入数据值了。也就是说o这个数组是来记录哪些数据已经添加到结果,用来判重使用的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?