.1选择排序和冒泡排序
选择排序:当前元素依次和后面每个元素进行比较 如果后面的数比较小,就交换位置 var arr = [10,9,12,5,1]; for(var i = 0;i<arr.length;i++){ for(var j = i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ var temp = arr[i]; arr[i] = arr[j] arr[j] = temp; } } } 冒泡排序:相邻的两个元素进行比较 如果后面的元素比较小 就交换位置 var arr = [10,9,12,5,1]; 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[i]; arr[i] = arr[j] arr[j] = temp; } } }
2.2数组的排序方法
-
sort排序:数组自带的排序方法
数组.sort() 不传参 数组.sort(function(a,b){ }) 传参
-
基础使用---不传参
var arr = [1, 9, 7, 8, 3, 6, 15, 20]; // 1.基础使用:sort() 不传参 根据ASCII码进行排序的 0-48 var newArr = arr.sort(); console.log(newArr);//[1, 15, 20, 3, 6, 7, 8, 9]
-
扩展使用:sort(function(a,b){}) 带参数 根据number类型排序
// 2.扩展使用:sort(function(a,b){}) 带参数 根据number类型排序 var arr = [1, 9, 7, 8, 3, 6, 15, 20]; arr.sort(function (a, b) { // console.log(a, b);//a和b是两个相邻的比较元素 a后一个元素 b是前一个元素 // return a - b;//从小到大 return b - a;//从大到小 }) console.log(arr);//[20, 15, 9, 8, 7, 6, 3, 1]
-
根据对象中某一个属性进行排序 根据年龄排序
var arr = [ { "name": "高珂俊", "age": 24, "date": "1998-10-1" }, { "name": "吉涛涛", "age": 19, "date": "2003-9-25" }, { "name": "张相渊", "age": 20, "date": "2002-4-5" }, { "name": "朱顺杰", "age": 15, "date": "2007-3-15" }, { "name": "胡兴伟", "age": 15, "date": "2007-3-15" } ] // 如果两个值相同,是根据原数组中的顺序结构显示 arr.sort(function (a, b) { console.log(a.age, b.age);//a和b是两个相邻的元素,{},{} return a.age - b.age;//从小到大 }) console.log(arr);
-
根据对象中的日期排序 日期排序是根据时间戳进行排序
var arr = [ { "name": "高珂俊", "age": 24, "date": "1998-10-1" }, { "name": "吉涛涛", "age": 19, "date": "2003-9-25" }, { "name": "张相渊", "age": 20, "date": "2002-4-5" }, { "name": "朱顺杰", "age": 15, "date": "2007-3-15" }, { "name": "胡兴伟", "age": 15, "date": "2007-3-15" } ] arr.sort(function (a, b) { // new Date(日期) 会自动进行隐式转换 转成时间戳的形式 // return new Date(a.date) - new Date(b.date) // Date.parse(字符串日期) 将字符串格式的日期转换成时间戳 return Date.parse(a.date) - Date.parse(b.date) }) console.log(arr);
-
根据对象中的中文排序
// 5.根据对象中的中文排序 var arr = [ { "name": "高珂俊", "age": 24, "date": "1998-10-1" }, { "name": "吉涛涛", "age": 19, "date": "2003-9-25" }, { "name": "张相渊", "age": 20, "date": "2002-4-5" }, { "name": "朱顺杰", "age": 15, "date": "2007-3-15" }, { "name": "胡兴伟", "age": 15, "date": "2007-3-15" } ] /* a.localeCompare(b) 字符串根据a - z从小到大进行排序 b.localeCompare(a) 字符串根据a - z从大到小进行排序 */ // g j z z h g高珂俊 h胡兴伟 j吉涛涛 z张相渊 z朱顺杰 arr.sort(function (a, b) { // return a.name.localeCompare(b.name) return b.name.localeCompare(a.name) }) console.log(arr)
-
随机排序
// 6.随机排序 Math.random() - 0.5 var arr = [1, 2, 3, 4, 5, 6]; arr.sort(function (a, b) { return Math.random() - 0.5; }) console.log(arr);
2.3数组的迭代方法
- 循环:for while do-while - 遍历:for-in - 迭代:every some filter forEach map
every
-
语法:数组:every(function(item,index,array){ item是当前元素 index当前元素下标 array是当前操作的数组 })
-
作用:对数组元素进行判断 当所有的判断结果为true的时候 才会返回true
// 1.every:对数组元素进行判断 当所有的判断结果为true的时候 才会返回true var arr = [100, 90, 60, 78, 90];//true true true true true // 需求:成绩是否都及格 var res = arr.every(function (item, index) {//item 当前遍历的元素 100 40 60 78 90 //index是下标 0 1 2 3 4 return item >= 60; }) console.log(res);//true
some
-
语法:数组:some(function(item,index,array){ item是当前元素 index当前元素下标 array是当前操作的数组 })
-
作用:.some:对数组元素进行判断 只要有一个为true 结果就为true
// 2.some:对数组元素进行判断 只要有一个为true 结果就为true var arr = [100, 90, 60, 78, 90];//true false false false false // 需求:成绩中有100分的吗? var res = arr.some(function (item, index) {//item 当前遍历的元素 100 40 60 78 90 //index是下标 0 1 2 3 4 return item == 100; }) console.log(res);//true
filter
-
语法:数组:filter(function(item,index,array){ item是当前元素 index当前元素下标 array是当前操作的数组 })
-
作用:filter(筛选):对数组元素进行判断 结果为true的元素会组成一个新的数组进行返回
// 3.filter(筛选):对数组元素进行判断 结果为true的元素会组成一个新的数组进行返回 var arr = [100, 90, 60, 78, 90];//true true false false true // 需求:将成绩大于90的元素筛选出来 var res = arr.filter(function (item, index) {//item 当前遍历的元素 100 40 60 78 90 //index是下标 0 1 2 3 4 return item >= 90 }) console.log(res);//[100,90,90]
map
-
语法:数组:map(function(item,index,array){ item是当前元素 index当前元素下标 array是当前操作的数组 })
-
作用:map:遍历数组 有返回值 返回值会组成一个新的数组进行返回
// 4.map:遍历数组 有返回值 返回值会组成一个新的数组进行返回 var arr = [50, 70, 20, 10]; // 需求:给所有的成绩都加5分 var res = arr.map(function (item, index) {//item 50 70 20 10 return item + 5 }) console.log(res);//[55, 75, 25, 15]
forEach
-
语法:数组:forEach(function(item,index,array){ item是当前元素 index当前元素下标 array是当前操作的数组 })
-
作用:forEach:遍历数组 没有返回值
// 5.forEach:遍历数组 没有返回值 var arr = [50, 70, 20, 10]; arr.forEach(function (item, index) { console.log(item, index); })
3.正则对象
-
正则对象:RegExp
-
概念:提前定义好的 用于检索字符串的逻辑表达式(正则表达式)
-
作用:验证字符串是否满足条件(多用于注册 登录界面) 验证手机号 /^1[3-9]\d{9}$/
3.1创建正则对象
-
字面量创建
// 1.字面量创建 /正则表达式/修饰符 \d 0-9 [0-9] var reg1 = /[0-9]/gi; console.log(reg1);
-
使用new关键字创建
// 2.使用new关键字创建 new RegExp(正则表达式,修饰符) var reg2 = new RegExp("[0-9]", "gi") console.log(reg2);
-
两者的区别
// 3.字面量创建和new关键字创建有什么区别 //字面量创建的正则表达式中 没有变量的概念 var a = "[0-9]" var reg3 = /a/gi; console.log(reg3);//a/gi //new关键字创建的 是可以识别变量 var b = "[0-9]" var reg4 = new RegExp(b, "gi"); console.log(reg4);///[0-9]/gi
3.2修饰符
-
g :global(全局):执行一个全局的匹配
// 1.g global(全局):执行一个全局的匹配 var str = "0823web0823b0823web"; // 需求:将所有的web都替换成java var reg = /web/g;//正则表达式 var newStr = str.replace(reg, "java"); console.log(newStr);//0823java0823b0823java
-
i:ignore case 执行一个不区分大小写的匹配
// 2.i ignore case 执行一个不区分大小写的匹配 var str = "she is girl,SHE is girl,he is girl"; //需求:将she替换成this var reg = /she/gi; var newStr = str.replace(reg, "this"); console.log(newStr);//this is girl,this is girl,he is girl