• WEB前端第四十一课——简单算法与解析indexof、hash、冒泡排序、递归、JSON


    1.indexOf数组去重

      从数组中找到相同的元素并删除,保证数组中每一个元素都是独一无二的操作

      基本思想:利用数组的indexOf()方法,寻找存入参数在数组中第一次出现的位置。

      缺点:实现这个方法的时候,会遍历数组直到找到目标元素为止,会消耗很多时间

      优点:保证了数组中元素的唯一性,减少内存占用(牺牲时间换空间)

        var arr0=[1,2,1,2,3,1,2,3,4];
        var arr1=[];
        for (var i=0;i<arr0.length;i++){
            if (arr1.indexOf(arr0[i])==-1){
                arr1.push(arr0[i]);
            }
        }
        console.log(arr1);    //返回结果: [1, 2, 3, 4]
    

    2.hash表数组去重

      基本思想:将已经出现过的元素当做属性名,存入一个 Object内,下标的引用要比用 indexOf搜索数组快的多

      hash(哈希表),又叫散列值表,是无序的键值对集合

      缺点:内存占用很多,以牺牲空间来换取时间

      代码示例:

        var arr0=[1,2,1,2,3,1,2,3,4];
        var arr1=[];
        var hash={};
        for (var i=0;arr0[i]!=undefined;i++){
            if (!hash[arr0[i]]){
                arr1.push(arr0[i]);
                hash[arr0[i]]='yes';
            }
        }
        console.log(arr1);    //返回结果: [1, 2, 3, 4]
        console.log(hash);   //返回结果:{1: "yes", 2: "yes", 3: "yes", 4: "yes"}
    

      note:由于数组检索时是根据元素下标每次从0开始逐一查找的,因此比较耗时

         而Object中存储的是无序的键值对,检索的算法快,但是会增加一份数据,多占用内存空间

    3.冒泡排序(Bubble Sort)

      基本思想:依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置,

           这样一遍比较下来,能够保证最大或最小的数排在最后一位。

           再对最后一位以外的数组,重复前面的过程,直至全部排序完成。

      代码示例:

    <script>
        var arrFirst=[1,5,9,52,13,32,27,1,44];
        for (var i=1;arrFirst[i]!=undefined;i++) {
            for (var j=0;j<arrFirst.length-1;j++){
                if (arrFirst[j]<arrFirst[j+1]){
                    var temp=arrFirst[j];
                    arrFirst[j]=arrFirst[j+1];
                    arrFirst[j+1]=temp;
                }
            }
        }
        console.log(arrFirst);    //返回结果:(9) [52, 44, 32, 27, 13, 9, 5, 1, 1]
    </script>
    

    4.递归函数

      能够自己调用自己的函数称为递归函数。

      条件:

        ① 拥有递归终止(退出)条件

        ② 递归能够执行下去的规则

        ③ 让递归变量向着递归结束的方向发生改变

      代码示例:

    <script>
        function factorial(x){
            if (x ==1){
                return 1;
            }else{
                return x*factorial(x-1);
            }
        }
        console.log(factorial(10));    //返回结果:3628800
    </script>
    

    5.快速排序

      基本思想:① 在数据集中随意选择一个基准元素(pivot),

           ② 所有小于基准的元素都放到基准的左边,所有大于基准的元素都放到基准的右边,

           ③ 对于基准左右两边的子集,不断重复前述两步骤,直到所有子集只剩下一个元素为止。

      代码示例:

    <script>
        var targArr=[1,5,9,52,13,32,27,1,44,38,16];
        function quickSort(temp){
            if (temp.length<=1){
                return temp;
            }
            var pivotIndex=Math.floor(temp.length/2);
            var pivot=temp.splice(pivotIndex,1)
            var tempLeft=[];
            var tempRight=[];
            for (var i=0;i<temp.length;i++){
                if (temp[i]<=pivot){
                    tempLeft.push(temp[i]);
                }else{
                    tempRight.push(temp[i]);
                }
            }
            return quickSort(tempLeft).concat(pivot,quickSort(tempRight));
        }
        console.log(quickSort(targArr));    //(11) [1, 1, 5, 9, 13, 16, 27, 32, 38, 44, 52]
    </script>
    

        注意:上述示例中“var pivot=temp.splice(pivotIndex,1)”,这条代码一定不能写在 if语句之前,

           因为“splice”方法会改变原数组,也就是说,在最后一次递归时“temp”数组中只有一个或两个元素的情况下,

           经过“splice”方法截取后,“temp”不再符合“if”条件,会被返回,但此时“temp”中的元素已经少了“pivot”元素,

           导致返回的“temp”只有一个元素或空数组,造成整个函数返回结果错误!!!

    6.Json语言

      Json(JavaScript Object Notation)是一种轻量级的数据交互格式。

      Json是一门独立的语言,是用于存储和传输数据的格式,通常用于服务器向网页传输数据。

      Json语言采用了JavaScript的语法,意味着JavaScript中处理Json数据不需要任何特殊的API或工具包。

      Json是js对象的字符串表现形式,它使用文本表示一个js对象的信息,本质是字符串。

      Json与JavaScript是两门不同的语言!

      在js语言中,一切都是对象,因此任何支持的类型都可以通过Json表示,如字符串、数字、数组等。

      Json的格式仅仅是一个文本,而文本是可以被任何编程语言读取和作为数据格式传输的。

      通俗理解:

        Json,就是将前台的数据(对象、数组等)转换成字符串发送给后台,

           将后台回传的数据(字符串)转换为普通的数据(对象、数组等),

           这样一个转换过程。

    7.Json解析方法

      由于Json内部的执行代码采用了js 的语法,因此Json对 js 提供的数据处理方法,不需要额外的数据包和API。

      两种数据处理方法:

        ① JSON .parse(后台传输过来的数据)

          反序列化方法(也称为JSON数据解析,简称JSON解析),能够把JSON字符串转换成JS数据类型,

          转换的时候,如果字符串中存在不符合JSON要求的格式,会直接报错

        ② JSON .stringgify(要向后台传输的数据)

          序列化方法(也称为JSON数据封装或数据加密),能够把JS数据类型转换成JSON字符串,

          转换的时候,如果字符串中存在不符合JSON要求的格式,会直接报错

      注意,

        JSON在日常开发过程中通常会有两个地方被用到,一个是发送请求的时候,会将数据封装成为一个JSON字符串;

        另一个是在接收请求来的数据的时,使用JSON将数据信息转换为可用的数据类型

      JSON书写格式:

        ① JSON键值对是用来保存JS对象的一种方式,和JS对象的写法大同小异,键值对组合中的键名要使用""包裹;

        ② JSON字符串统一采用单引号,因此JSON字符串内容中如果出现引号,则必须为双引号。

        语法示例:var obj = '{"name":"Lili","age":22,"sex":"female"}';

      代码示例:

    <script>
        var obj = {
            name:"Lili",
            age:22,
            sex:"female"
        };
    //    JSON封装
        var JsonObj=JSON.stringify(obj);
        console.log(JsonObj);    //返回结果:{"name":"Lili","age":22,"sex":"female"}
        console.log(typeof JsonObj);    //返回结果:string
    //    JSON解析
        var jsObj=JSON.parse(JsonObj);    
        console.log(jsObj);    //返回结果:{name: "Lili", age: 22, sex: "female"}
        console.log(typeof jsObj);    //返回结果:object
    </script>
    
  • 相关阅读:
    Verilog杂谈
    Hadoop家族学习路线图
    R语言中apply函数
    R语言数组array函数
    R语言列表list函数
    R语言多元素向量
    R语言提取字符串的一部分substring函数
    R语言改变大小写 toupper()和 tolower()函数
    R语言统计字符串的字符数ncahr函数
    R语言格式化数字和字符串format函数
  • 原文地址:https://www.cnblogs.com/husa/p/13655169.html
Copyright © 2020-2023  润新知