- A+
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>