zoukankan      html  css  js  c++  java
  • 用哈希表去数组重复项,有详细注释

    这个我不懂,男朋友给我讲了一遍,我还是不太明白,于是自己带入实例一个一个理了一遍,写上了很详细的注释,如果有人能看到,并且和我一样不太理解,希望看到这个就都能懂哈,哎学习中的菜鸟伤不起~

    var countArr = [1, 2, 1];
    function unique(arr) {
        var resultArr = [],
            hash = {}; //定义返回的数组,和哈希表
        for (var i = 0, elem;
        (elem = arr[i]) != null; i++) {
            //for循环第一句话:定义i=0,和elem两个变量
            //for循环第二句话:把arr[i]的值赋给elem,判断elem的值是否为空
            //①当i=0,第一次循环,elem=arr[0]=1,所以不为null,进入循环内部
            //②当i=1,第二次循环,elem=arr[1]=2,所以不为null,进入循环内部
            //③当i=2,第三次循环,elem=arr[2]=1,所以不为null,进入循环内部
            if (!hash[elem]) {
                //①这时elem=1,if(!hash[1])由于这时hash={},所以hash[1]没有值为false,!hash[1]就为true,执行if内部语句
                //②这时elem=2,if(!hash[2])由于这时hash={1:true},所以hash[2]没有值为false,!hash[2]就为true,执行if内部语句
                //③这时elem=1,if(!hash[1])由于这时hash={1:true,2:true},所以hash[1]有值为true,!hash[1]就为false,不执行if内部语句
                resultArr.push(elem);
                //①resultArr=[1]
                //②resultArr=[1,2]
                //不执行第三次
                hash[elem] = true;
                //①hash={1:true}
                //②hash={1:true,2:true}
                //不执行第三次
            };
        };
        return resultArr;
    }
    document.write(unique(countArr));
  • 相关阅读:
    dispatch_semaphore
    dispatch_set_target_queue
    iOS charles支持https抓包
    ios8 毛玻璃效果
    工程里配置.xconfig文件
    线程安全的nsmutabledictionary(读weex代码)
    关于信号量以及多线程的代码
    dispatch_set_target_queue测试
    dyld: Library not loaded问题解决
    iOS图片上加标签或者水印
  • 原文地址:https://www.cnblogs.com/muwei/p/4941882.html
Copyright © 2011-2022 走看看