• 关于数组方面的算法分析


    /** 删除数组中指定索引的数据 **/

    Array.prototype.deleteAt = function (index) {
        if (index < 0) {
            return this;
        }
        // 截取要删除索引之前的值,然后和之后的值合并。
        return arr.slice(0,index).concat(arr.slice(index+1));
    }

    /** 数组洗牌 **/

    Array.prototype.random = function () {
        var tempArr = [], me = this, t;
        // 如果当前数组的len大于0的话执行
        while (me.length > 0) {
            // 让当前数组的长度乘以随机数,避免是小数,取整   因为随机数是一个小于0的数,所以乘以数组的长度最大只会是数组的长
            t = Math.floor(Math.random() * me.length);
            // 通过一个临时数组保存那个随机数里面的数组值。
            tempArr[tempArr.length] = me[t];
            // 删除那个已经添加到临时数组里面的值。
            me.splice(t,1);
        }
        return tempArr;
        // 原理,从原数组中随机抽出一个数添加到临时数组中,然后删除将原数组中抽取出来的那个值。
    }
    Array.prototype.orderRandom = function () {
        return this.sort(function (a,b) {
            return Math.random() > 0.5 ? a<b : a>b;
        });
           // 因为sort函数会将数组中的前一个值和后一个值循环进行比较,根据排序的规则进行交换位置,然后我们可以通过一个随机数判断它是否大于0.5一半的值,如果大于就让它怎么样排序,否则怎么样排序,总之不要让这个排序一样。
    }

    /** 数字数组排序 **/

    Array.prototype.sortNum = function (i) {
        if (!i) {
            i = 0;
        }
        if (i == 1) {
            return this.sort(function (a, b) {
                return b - a;
            });
        }
        return this.sort(function (a, b) {
            return a - b;
        });
        // 如果传入的值小于0等于0则按从小到大排序,如果等于1从大到小排序。
    }

    /** 获取数字数组中的最大项 **/

    Array.prototype.getMax = function () {
        return this.sortNum(1)[0];
        // 从大到小排序,然后获取第一位
    }

    /** 获取数字数组中的最小项 **/

    Array.prototype.getMin = function () {
        return this.sortNum(0)[0];
        // 从小到大排序,然后获取第一位
    }

    /** 数组第一次出现指定元素的位置 **/   追梦子博客园

    Array.prototype.indexOf = function (o) {
        for (var i = 0; i < this.length; i++) {
            if (this[i] == o) {
                // 如果找到这个值直接返回这个值,退出函数
                return i;
            }
        }
        // 找不到返回-1
        return -1;
    }

    /** 去除数组中的重复项 **/

    Array.prototype.arrUnique = function () {
        var reset = [], done = {};
        // 创建一个数组和一个临时对象,数组用来保存去掉重复以后的值,对象用来判断
        for (var i = 0; i < this.length; i++) {
            // 创建一个变量,让它等于当前数组索引的值
            var temp = this[i];
            // 如果这个对象的属性没有数组里面的值,就给这个对象添加这个数组的值
            if (!done[temp]) {
                done[temp] = true;
                // 把这个值添加到新数组中
                reset.push(temp);
            }
        }
        return reset;
        // 创建一个对象,然后让这个对象的属性等于数组的值,如果这个对象有这个值,那么说明是重复的那就补添加到新数组中。
    }

     /** 去除数组中的重复项 **/

        var array = [2,4,9,4,3,4,6,5,9,10];
        var temp = [];
        var isTrue = null;
        // 添加一个临时数组
        for(var i=0,len=array.length;i<len;i++){
            // 判断这个临时数组的长度,是不是0,如果是的话给它添加一个。
            if(temp.length!=0){
                // 拿这个临时数组里面的每一个值来判断里面的值和array里面的值相同。
                for(var k=0,len2=temp.length;k<len2;k++){
                    // 定义一个开关,如果值相同就不让它添加,否则才添加。
                    isTrue = true;
                    if(temp[k]===array[i]){
                            isTrue = false;
                            break;
                    }
                }
                // 判断是否为真
                if(isTrue){
                    temp.push(array[i]);
                }
            }else{
                temp.push(array[i]);
            }
        }
        console.log(temp); //[2, 4, 9, 3, 6, 5, 10]
  • 相关阅读:
    【转载】消息队列使用的四种场景介绍
    Vue项目部署打包
    创建Vue项目vue-cli &#183; Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT
    数据库错误:ORA-12154
    oracle数据库一条sql语句批量插入数据
    Linux time scap
    winscp不能使用root登录
    Linux find ./ -name *.bak | xargs rm -rf
    Linux命令echo 3 > /proc/sys/vm/drop_caches
    redis查看服务器占用端口
  • 原文地址:https://www.cnblogs.com/pssp/p/5285319.html
Copyright © 2020-2023  润新知