冒泡排序 function maopao(arr) {
for(var i=0;i<arr.length-1;i++){
for(var j=0,temp;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j+1]
arr[j+1]=arr[j]
arr[j]=temp
}
}
}
return arr
}
选择排序
外层循环-1,为什么?因为最后一个数没有值可以比较
一开始选定下标为i的值(起始值)是最大值
一轮循环结束后如果找到最大值则两者交换位置
let arr=[4,2,1,6,7]
for (let i = 0; i < arr.length-1; i++) {
let win=i
for (let j = i+1; j < arr.length; j++) {
if(arr[win]<arr[j]){
win=j
}
}
if(win!=i){
var temp=arr[i]
arr[i]=arr[win]
arr[win]=temp
}
}
console.log(arr);
快速排序
利用递归
如果arr长度小于二则返回arr
若大于二,则找到中间数下标并取出值
准备两个空数组
让数组里的数与中间数比较,小于中间数的放在左边,反之放在右边
将左右两边的数组拼接起来
function quickSort(arr) {
if(arr.length<2){
return arr
}
var minddleIndex=parseInt(arr.length/2)
var minddelValue=arr.splice(minddleIndex,1)[0]
var left=[],right=[]
for(var i=0;i<arr.length;i++){
if (arr[i]>minddelValue) {
right.push(arr[i])
}else{
left.push(arr[i])
}
}
return quickSort(left).concat(minddelValue,quickSort(right))
}
高阶函数
ES:ecmascript 定义语法规范
高阶函数:ES5推出 对数组的增强
forEach() map() some() every() filter() reduce()
forEach()
只能做遍历,返回undefined,没有返回值,不能被中断,如果一定要中断,可以使用异常捕获+throw抛出异常
try ... catch 捕获异常,性能比较差,尽量少使用,可以用在网络连接的地方
var arr=[11,22,33,44,55,66]
try{
var res=arr.forEach( (item,index) =>{
console.log(item,index);
if(index==2){
throw new Error('制造异常')
}
})
}catch(error){
}
map()
也可以用作数组遍历,它会返回一个新的数组,数组的内容,跟回调函数的返回结果有关
var arr=[11,22,33,44,55,66]
var res =arr.map((item,index,a/*形参名*/)=>{
console.log(item,index,a);
return item*10
})
console.log(res);
/*
11 0 [11, 22, 33, 44, 55, 66]
22 1 [11, 22, 33, 44, 55, 66]
33 2 [11, 22, 33, 44, 55, 66]
44 3 [11, 22, 33, 44, 55, 66]
55 4 [11, 22, 33, 44, 55, 66]
66 5 [11, 22, 33, 44, 55, 66]
返回值 item*10 [110, 220, 330, 440, 550, 660]
*/
some()
如果数组的成员至少有一个满足了当前的条件,则返回true 默认返回false
var arr=[11,22,33,44,55,66] var res=arr.some((item,index,a)=>{ return item>50 }) console.log(res);//true
every()
如果数组的成员,都满足了当前的条件,则返回true 默认返回false
var arr=[11,22,33,44,55,66] var res=arr.every((item,index,a)=>{ return item>50 }) console.log(res);//false
filter()
在css3中是滤镜属性,会让图片变灰暗
过滤: 返回是一个新的数组,数组的内容根据条件决定个数
var arr=[11,22,33,44,55,66] var res=arr.filter((item,index,a)=>{ return item>30 }) console.log(res);//[33, 44, 55, 66]
reduce()
可以用作数组求和或者求积
var arr=[11,22,33,44,55,66]
var res=arr.reduce((pre,cur)=>{//pre是指定的参数0
return pre+cur
},0)
console.log(res);//321
var arr=[1,2,3,4,5,6]
var res=arr.reduce((pre,cur)=>{
return pre*cur
},1)
console.log(res);//720
//方法2
var arr=[11,22,33,44,55,66]
var res=arr.reduce((pre,cur)=>{//默认pre是第一个数
return pre+cur
})
console.log(res);
信息搜索
获取页面上的元素
遍历数组,把数据渲染到页面上
点击搜索拿到内容进行匹配
把搜索到的新数据渲染到页面
table,tr,td,th{ border: 1px solid #000; text-align: center; } table{ width: 400px; border-collapse: collapse; border-spacing: 0; }
<input type="text" id="txt"><button id="search">搜索</button> <table> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody id="content"> </tbody> </table>
var user=[ {id:001,name:'张三',age:20,sex:'男'}, {id:002,name:'李四',age:21,sex:'男'}, {id:003,name:'王五',age:22,sex:'男'}, {id:004,name:'赵六',age:23,sex:'男'}, {id:005,name:'露西',age:24,sex:'女'}, {id:006,name:'郑妮',age:25,sex:'女'}, {id:007,name:'李丽',age:26,sex:'女'} ] //获取页面上的元素 var oTxt=document.getElementById("txt") var oSearch=document.getElementById("search") var oCentent=document.getElementById("content") //遍历数组,把数据渲染到页面上 var strHtml='' user.forEach((item,index) => { strHtml+=` <tr> <td>${item.id}</td> <td>${item.name}</td> <td>${item.age}</td> <td>${item.sex}</td> </tr> ` }); oCentent.innerHTML=strHtml //点击搜索拿到内容进行匹配 oSearch.onclick=()=>{ var strName=oTxt.value var searchList=user.filter((item)=>{ return item.name.indexOf(strName)!=-1 }) //把搜索到的新数据渲染到页面 var tabHtml=searchList.reduce((pre,cur)=>{ pre+=` <tr> <td>${cur.id}</td> <td>${cur.name}</td> <td>${cur.sex}</td> <td>${cur.age}</td> </tr> ` return pre },"") oCentent.innerHTML=tabHtml }
字符串就是一串字符,由双(单)引号括起来。
字符串是 JavaScript 的一种数据类型。
字符串的创建方式
1.字符串的字面量表达式(值类型)
var str = ‘亲’; //基本类型string
2.构造函数创建字符串(引用类型)
var str = new String(“hello”); //引用类型object
3.var str = String(‘hello’);
注意: 用new产生的变量都是引用类型的变量,也叫对象
基本类型: string, number, boolean, undefined,null等
引用类型/对象: Array , Date, Object, String, Function等
字符串有恒定性,字符串不会被修改
字符串的方法
charAt(index) 某个位置有某个字符串
charCodeAt() 将数据转换为Unicode
静态方法 String.fromCharCode() 将Unicode转换为字符
截取
1.slice(开始位置,结束位置)
var str='abc123' console.log(str.slice(2,4));//c1
2.substring
与slice的作用是一样的 但它的参数可以反着写
str='abc123' console.log(str.substring(2,4));//c1 console.log(str.substring(4,2));//c1
3.substr
第二个参数表示截取的个数
str='abc123' console.log(str.substr(2,2));//c1
replace 替换
返回一个新数组 该方法支持正则,不会改变原数组
str='asdcv' str2=str.replace('v',6) console.log(str);//asdcv console.log(str2);//asdc6
查找
1.indexOf
找到返回下标,找不到返回-1
第二个参数默认是0,也可以指定开始查找位置
var str='jkhfdbnvkujdshgnkj' console.log(str.indexOf('j',2));//10
2.lastIndexOf
某个字符最后出现的位置
var str='jkhfdbnvkujdshgnkj' console.log(str.lastIndexOf('k'));//16
3.search
找到返回下标,找不到返回-1 与indexOf一样,但是它支持正则
str='1564896749641' console.log(str.search('1'));//0 console.log(str.search(/8/));//4
4.match
找到返回数组,找不到返回null 支持正则
str='abc123' console.log(str.match('c')); //['c', index: 2, input: 'abc123', groups: undefined] console.log(str.match('f'));null console.log(str.match(/c/)); //['c', index: 2, input: 'abc123', groups: undefined]
合并 + 和 concat
var str1='erwgyh' var str2='456' console.log(str1+str2);////erwgyh456 console.log(str1.concat(str2));////erwgyh456
split 切割
返回数组 支持正则
str='2022-7-19' console.log(str.split());//['2022-7-19'] console.log(str.split('')); //['2', '0', '2', '2', '-', '7', '-', '1', '9'] console.log(str.split('-'));//['2022', '7', '19']
转大小写
toUpperCase() 转大写
var str='ahjfd' var str1=str.toUpperCase() console.log(str);//ahjfd console.log(str1);//AHJFD
toLowerCase() 转小写
var str='SFEDFDG' var str1=str.toLowerCase() console.log(str);//SFEDFDG console.log(str1);//sfedfdg
\:转义符
g:global 全局变量 如果存在多个要替换的值是使用
var str="HE L ** L ** O ** WO R******L D *!" var str1=str.replace(/\*/g,'').replace(/ /g,'') console.log(str1);
Math对象
Math对象可以用于执行数学任务Math对象的常用函数:
Math.round(3.6) //四舍五入
Math.random() //返回0-1之间的随机数
Math.max(num1, num2) //返回较大的数
Math.min(num1, num2) //返回较小的数
Math.abs(num) //绝对值
Math.ceil(19.3) //向上取整
Math.floor(11.8) //向下取整
Math.pow(x,y) //x的y次方
Math.sqrt(num) //开平方