拼命二郎 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条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?