JavaScript:算法与数据

排序之冒泡排序

在这里插入图片描述

  • 比较相邻的两个元素,如果前一个比后一个大,则交换位置
  • 比较完第一轮的时候,最后一个元素是最大的元素
  • 这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小
    在这里插入图片描述
    在这里插入图片描述
function sort(arr) {
    for (var i = 0; i < arr.length-1; i++) {
        for (var j = 0; j < arr.length - 1 -i; j++) {
            // 相邻元素两两对比,元素交换,大的元素交换到后面
            if (arr[j] > arr[j + 1]) {
                var temp = arr[j];
                 arr[j] = arr[j+1];
                 arr[j+1] = temp;
           }
            console.log("循环次数"+j+":"+arr);
       }
        console.log("第"+i+"轮结束");
   }
    return arr;
}

算法之递归

什么是递归呢?

从前有座山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山…

这就是一个典型的递归,在不考虑岁数等自身的条件下,这将是个死递归,没有终止条件.

递归本子上是将原来的问题,转化为更小的同一问题,大白话就是一个函数不断的调用自己。
在这里插入图片描述

function sum (num) {
    if (num <= 1) {
        return 1;
   } else {
        return (num * sum(num-1));
   }
};

递归三要素

  • 一个问题的解可以分解为几个更小的同一题的解
  • 分解后的子问题只存在数据不一样的问题。
  • 存在递归终止条件

排序之快速排序

在这里插入图片描述
“快速排序”的实现很简单,这个排序过程只需要四步:

  • 在数据集之中,选择一个元素作为“基准”(pivot)
  • 所有小于“基准”的元素,都移到“基准”的左边;所有大于“基准”的元素,都移到“基准”的右边
  • 对“基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
  • 把所有的生成的新的数组元素合并在一起

举例来说,现在有一个数据集 {4,2,5,7,3,9,1} 怎么对其排序呢?

第一步,选择中间的元素 7 作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)
在这里插入图片描述
第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于7",另一个"大于等于7"
在这里插入图片描述
第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止
在这里插入图片描述
第四步,合并所有的元素
在这里插入图片描述

var quickSort = function (arr) {
    if (arr.length <= 1) {
        return arr;
   }
    var pivotIndex = Math.floor(arr.length /2);
     var pivot = arr.splice(pivotIndex, 1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < pivot) {
            left.push(arr[i]);
       } else {
            right.push(arr[i]);
       }
   }
    return quickSort(left).concat([pivot],
quickSort(right));
};

Chrome浏览器插件下载

在这里插入图片描述
我们在实际的开发过程中,经常需要用到一些浏览器插件
1 访问谷歌应用商店
2 利用第三方网站下载安装:https://chrome.zzzmh.cn/index
推荐搜索引擎:必应

JSON对象

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

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

JSON语言采用了Javascript的语法,这意味着Javascript中处理JSON数据不需要任何特殊的API或工具包,但是还是需要说明的一点就是:
JSON和Javascript是两门不同的语言。
JSON的格式仅仅是一个文本,而文本时可以被任何编程语言读取及作为数据格式传递的。

ps:JSON就是
(1)将【前台的数据(对象、数组等)】转换成【字符串发送给后台】
(2)将【后台回传的数据(字符串)】转换为【普通的数据(对象、数据等)】
这个转换过程。

每个 JSON 对象可能是一个数组或对象,也可能是一个原始类型的值。

JSON 对值的类型和格式有严格的规定。

  • 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。

  • 原始类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN,
    Infinity, -Infinity和undefined)。

  • 字符串必须使用双引号表示,不能使用单引号。

  • 对象的键名必须放在双引号里面。

  • 数组或对象最后一个成员的后面,不能加逗号。

以下都是合法的 JSON

["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"} ]

以下都是不合法的 JSON

{ name: "张三", 'age': 32 }  // 属性名必须使用双引号
[32, 64, 128, 0xFFF] // 不能使用十六进制值
{ "name": "张三", "age": undefined } // 不能使用 undefined
{ "name": "张三", "birthday": new Date('Fri, 26 Aug 201107:13:10 GMT'),
  "getName": function () {
      return this.name;
 }
} // 属性值不能使用函数和日期对象

JSON提供的方法

前面提过JSON是用来对数据进行处理和转换的一种语言,并且在JSON内部的执行代码采用了js的语法,因此JSON对JS之间提供了两个方法来处理数据,而不需要额外的添加各种数据包和API。


(1)JSON.parse(后台传输过来的数据)
 反序列化方法(有时候也被称为JSON数据解析,简称JSON解析)
 能够把JSON字符串,转换成JS数据类型转换的时候,如果字符串中存在不符合JSON要求的格式,会直接报错。
(2)JSON.stringify(要向后台传输的数据)
 序列化方法(有时候也被称为JSON数据封装或数据加密)
 能够把JS数据类型转换成JSON字符串转换的时候,如果字符串中存在不符合JSON要求的格式,会做对于的处理。

注意:
JSON在时间开发过程中通常会有两个地方被用到。一个是发送请求的时候,会将数据封装为一个JSON字符串在发送。反过来第二点就是在接收请求来的数据时,使用JSON来将数据信息转换为时间可用的数据类型。

JSON 对象方法之stringify()
JSON.stringify方法用于将一个值转为 JSON 字符串。该字符串符合JSON 格式,并且可以被JSON.parse方法还原。

JSON.stringify({ name: "张三" })
// '{"name":"张三"}'

JSON 对象方法之parse()
JSON.parse方法用于将 JSON 字符串转换成对应的值。

var o = JSON.parse('{"name": "张三"}');

编程风格

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值