WEB前端第四十一课——简单算法与解析

  • A+
所属分类:Web前端
摘要

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

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> 

 

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>