排序之冒泡排序
- 比较相邻的两个元素,如果前一个比后一个大,则交换位置
- 比较完第一轮的时候,最后一个元素是最大的元素
- 这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小
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": "张三"}');