• 数组去重代码怎么写?


    <!DOCTYPE html>
    <html>
        <head>
            <title>Array delete duplicate</title>
        </head>
        <body>
            
        </body>
    </html>
    
    <script>
    
    /**
     * 实现一
     * 最容易想到的, 通过两个循环对比返回
     * 正因为使用了两个循环, 因此在最差的情况下, 时间复杂度是O(n^2)
     */
    
        var arr = [1,1,2,2,3,3,4,5,];
        
        Array.prototype.unique1 = function () {
            var newArr = [],
            len = this.length,
            i,j,
            isrepeat;
            
            for(i = 0; i< len; i++) {
                isrepeat = false;
                for(j = 0; j < newArr.length; j++) {
                    if(this[i] == newArr[j]) {
                        isrepeat = true;
                        break; //退出当前整个循环
                    }
                }
                
                if(!isrepeat) {
                    newArr.push(this[i]);
                }
            }
            
            return newArr;
        }
        console.log("unique1: " + arr.unique1() );
    
     /**
     * 实现二
     * 使用了Array的indexOf方法, 减少了一次循环
     * 虽然使用indexOf方法, 减少了一次循环, 但是indexOf方法浏览器的实现, 必定也是需要遍历数组的
     * 但是通过浏览器内核的遍历必定是会比自己循环快得多的
     */
       
        
        Array.prototype.unique2 = function() {
            var newArr = [],
            len = this.length,
            i;
            for(var i = 0; i < len; i++) {
                if(newArr.indexOf(this[i]) > -1) {
                    continue;   //退出本次循环
                }
                newArr.push(this[i]);
            }
            
            return newArr;
        }
        
        console.log("unique2: " + arr.unique2() );
        
       /**
     * 实现三
     * 利用hash表快速查找元素是否存在
     * 考虑到 hash[1] === hash["1"] 的情况, key添加了类型后缀
     */ 
        Array.prototype.unique3 = function () {
            var hash = {},
            len = this.length,
            key = null,
            newArr = [],
            i;
            
            for(i = 0; i < len; i++) {
                key = this[i] + "_" + (typeof this[i]);
                if(hash[key]) {
                    continue;   //退出本次循环,不执行接下来的代码
                }
                hash[key] = true;
                newArr.push(this[i]);
                
            }
            
            console.log(hash)
            return newArr;
        }
        
        console.log("unique3: " + arr.unique3() );
        
        
        
        
        
    </script>
  • 相关阅读:
    IDEA新建SpringBoot+JSP项目
    设计模式笔记之六 (适配器模式)
    设计模式笔记之十三 (责任链模式)
    设计模式笔记之七 (桥接模式)
    设计模式笔记之八 (组合模式)
    CanJS 简单入门
    设计模式笔记之十二 (代理模式)
    设计模式笔记之三(单例模式)
    设计模式笔记之二(工厂模式)
    设计模式笔记之一
  • 原文地址:https://www.cnblogs.com/facial/p/5820200.html
Copyright © 2020-2023  润新知