VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > JavaScript教程 >
  • WEB前端第四十一课——简单算法与解析indexof、hash、冒泡排序、递归、JSON

1.indexOf数组去重

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

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

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

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

1
2
3
4
5
6
7
8
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(哈希表),又叫散列值表,是无序的键值对集合

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

  代码示例:

1
2
3
4
5
6
7
8
9
10
11
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)

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

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

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

  代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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.递归函数

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

  条件:

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

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

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

  代码示例:

1
2
3
4
5
6
7
8
9
10
<script>
    function factorial(x){
        if (x ==1){
            return 1;
        }else{
            return x*factorial(x-1);
        }
    }
    console.log(factorial(10));    //返回结果:3628800
</script>

5.快速排序

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

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

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

  代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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"}';

  代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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>

 出处:https://www.cnblogs.com/husa/p/13655169.html


相关教程