• 数组+排序--知识点总结


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            canvas{
                border: 1px solid black;
                background-color: #CCCCCC;
                display: block;
                margin: 0 auto;
            }
        </style>
    
    </head>
    <body>
    <canvas width="600px" height="400px"></canvas>
    <script>
        var myCanvas = document.querySelector("canvas");
        var ctx = myCanvas.getContext("2d");
    
        //1、返回数组中出现次数最多的字符
        function delMul(arr) {
            let obj = {};
            arr.forEach((item,index) => {
                if (!obj[item]){
                    obj[item] = 1;
                }else {
                    obj[item]++;
                }
            });
            let maxChar,
                maxValue=1;
            for (let k in obj){
                if(obj[k] > maxValue){
                    maxChar = k;
                    maxValue = obj[k];
                }
            }
            return maxChar;
    
        }
        // let arr = ['a','a','a','b','c','d','d','d','e','d','a'];
        // console.log(delMul(arr))
    
        //2、快速排序===选取一个参考元素,大于该参考元素的压入右边数组,小于该元素的压入左边数组,
        //对左右边数组递归进行上一次左右边数组的操作,最后返回合并后的数组
        function quickSort(arr) {
    
            if (arr.length <= 1){
                return arr;
            } 
            
            let leftArr = [],
                rightArr = [];
            let temp = arr[0];
    
            for(let i=1;i<arr.length;i++){   //!!!!从1开始循环
                if(arr[i] > temp){
                    rightArr.push(arr[i]);
                }else{
                    leftArr.push(arr[i]);
                }
            }
            return [].concat(quickSort(leftArr),[temp],quickSort(rightArr))
        }
    
        //3、冒泡排序====相邻元素进行比较互换位置,一轮结束最后一个元素是数组最大值;
        //外层循环为比较轮数,轮数为数组长度减一:arr.length-1
        //内层循环为每轮的比较次数,==arr.length-1-轮数;轮数每增加一轮,该轮最大值确定一个,相应的比较次数减少一次
        function bubbleSort(arr){
            for (var i=0;i<arr.length-1;i++){ //轮数 :n-1
                for(var j=0;j<arr.length-1-i;j++){ //比较次数 :n-1-i
                    if(arr[j] > arr[j+1]){
                        let temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
            return arr;
        }
    
        //4、不借助临时变量,进行两个整数的互换;思想:利用+-进行计算
        function swap(a,b){
            a = a-b; //两数之差, b未变
            b = b+a; //未变b+两数之差=原a
            a = b-a; //已变b-两数之差=原b
    
            return [a,b];
        }
    
        //5、斐波那锲数列=黄金分割数列,主要考察递归的调用;定义:fibo[i] = fibo[i-1] + fibo[i-2];例如:0,1,1,2,3,5,8,13,21,34,56......
        //使用canvas绘制一个有限度的斐波那锲数列的曲线
        //1、生成斐波那锲数列数组;2、用canvas绘制
        //相似问题:生成斐波那锲数组、计算斐波那锲数列第n项
        function fibo(n){
            let fiboArr = [0,1];
            let res;
            while(n>2){
                res = fiboArr[fiboArr.length-1] + fiboArr[fiboArr.length-2];
                fiboArr.push(res);
                n--;
            }
            return fiboArr;
        }
        function fibona(n){
            let fiboArr = [];
            let i = 0; //初值
            
            while(i < n){
                if (i<=1){
                    fiboArr.push(i)
                } else{
                    let res = fiboArr[fiboArr.length-1] + fiboArr[fiboArr.length-2];
                    fiboArr.push(res);
                }
                i++;
            }
            return fiboArr;
        }
        //6、求一个正数组的最大差值====最大值与最小值之差
        function getMaxDiff(arr){
            let minValue = arr[0]; //假设数组中最小值为第一个元素
            let maxValue = arr[0];
            let maxDiff = 0; // 声明最大差值变量,默认为0
            for(var i = 0;i < arr.length;i++){
                minValue = Math.min(minValue,arr[i]); //当前值与最小值进行比较,得到较小者
                maxValue = Math.max(maxValue,arr[i]); //当前值与最大值进行比较,得到较大者
            }
            maxDiff = maxValue - minValue;
            return maxDiff;
        }
        function getMaxDiff2(arr){
            let minValue = arr[0]; //假设数组中最小值为第一个元素
            let maxDiff = 0; // 声明最大差值变量,默认为0
            for(var i = 0;i < arr.length;i++){
                minValue = Math.min(minValue,arr[i]); //当前值与最小值进行比较,得到较小者
                curDiff = arr[i] - minValue; //当前差值
                maxDiff = Math.max(curDiff,maxDiff); //  当前差值与最大差值进行比较,取较大者
            }
            return maxDiff;
        }
    
        //7、指定字符串长度,生成随机字符串
        function getRandomStr(n){
            let ele = "abcdefghijklmnopqrstuvwxyz0123456789";
            let strArr = []; //字符串数组
            let eleLength = ele.length;
            let str;
            for(let i=0;i<n;i++){
                let index = Math.floor(Math.random()*eleLength); //获取随机索引0--35
                strArr.push(ele[index]);
            }
            str = strArr.join(""); //str = strArr.push(ele).join("") ====> str += ele;直接拼接
            return str;
        }
        //8、获取指定范围内的随机数,如(min,max)
        function getRandom(min,max){
            return Math.floor(Math.random()*(max - min) + min); //不包含最大值,(max-min+1)
        }
        //9、生成从0到指定值的数字数组
        function numArr(n){
    
            // var arr2=[],length=100,i=1;
            // for(;arr2.push(i++)<length;){} //
    
            let arr = [];
            for(var i = 0;i < n+1;i++){
                arr.push(i);
            }
            return arr;
        }
        //10、打乱数字数组的排列顺序
        function messArr(){
            arr.sort(function(){return Math.random()-0.5;});  //随机数(-0.5~0.5),随机的正数、零、负数,进行随机排列
        }
    
        //11、对象转换为数组(将对象的属性转为数组[1,2,3]、将对象的值转为数组[1,2,3]、将对象的每组键值对以对象的形式保存在数组[{1:1},{2:2},{3:3}])
        //11.1
        function objToArr(obj){
            let keyArr = [],
                valueArr = [],
                objArr = [];
            for(let key in obj){
                objUnit = {};
                keyArr.push(key);  //属性数组
                valueArr.push(obj[key]); //值数组
                objUnit.key = obj[key];
                objArr.push(objUnit); //对象数组
            }
            // return keyArr;
            // return valueArr;
            return objArr;
        }
        //11.2
        function objToArr2(obj){
            let objArr1 = [].slice.call(obj);   //obj必须为  {0:"a",1:"b",2:"c",length:3}  格式
            let objArr2 = Array.prototype.slice.call(obj);
            return objArr2
        }
    
        //12、验证是否为数组
        function isArray(arr){
            return Object.prototype.toString.call(arr) === '[object Array]';
        }
    
        //13、获取数组中的最大值或最小值
        function getMaxOrMin(arr){
            return {
                max: Math.max.apply(null,arr.join(",").split(",")), //Math.max.apply(null,arr)
                min: Math.min.apply(null,arr.join(",").split(",")),
            }
        }
    
        //14、保留指定小数
        function toFixed(num){
            return num.toFixed(3);  //保留3位小数
        }
    
        //15、不要使用delete直接删除数组中的元素,删除元素赋值为undefined,数组长度保持不变
        //可以通过splice()删除数组中的某一项
    
        //16、生成指定长度的随机字母数字字符串  Math.random().toString(36).substr(2)===(0,1)=> 36进制 => 去除小数随机字符串
        function getRandomStr(len){
            let str = "";
            for (;str.length < len; str+=Math.random().toString(36).substr(2));
            return str.substr(0,len);
        }
    
        //17、如果 obj!=null ,那么obj 不为 undefined && null ;
        //18、找出数组中出现次数最多的元素,并给出其出现多的位置
        function mostEleInArr(arr){
            //对象,属性为数组中每个元素,值为数组,保存每个元素的索引
            let obj = {};
            let curEle;
            for(let i = 0; i < arr.length; i++){
                curEle = arr[i];
                if(obj[curEle] == null){
                    obj[curEle] = [];
                }
                obj[curEle].push(i);
            }
            //出现次数最多的元素
            let mostEleTimes = 0;
            let mostEle;
            for (let key in obj){
                if(obj[key].length > mostEleTimes){
                    mostEleTimes = obj[key].length;
                    mostEle = key;
                }
            }
            return [mostEle,obj[mostEle]];
        }
    
    </script>
    </body>
    </html>
  • 相关阅读:
    ASP.NET页面生命周期总结(完结篇)
    ASP.NET页面生命周期总结(2)
    ASP.NET页面生命周期总结(1)
    springboot-简介
    python-day2
    python-day1
    jsoup解析页面
    httpclient模拟浏览器
    httpclient
    变量名和函数名重复的话
  • 原文地址:https://www.cnblogs.com/minyDong/p/11377026.html
Copyright © 2020-2023  润新知