day09 API排序 二维数组、string概念

64 阅读5分钟

1、*****ArrayAPI: 1、*****排序:2种方式 1、鄙视/面试:冒泡排序:从第一个元素开始,依次比较相邻的两个元素,只要前一个元素>后一个元素,我们就交换两者的位置 公式: for(var j=1;j<arr.length;j++){ for(var i=0;i<arr.length-j;i++){ if(arr[i]>arr[i+1]){ var m=arr[i]; arr[i]=arr[i+1]; arr[i+1]=m; } } }

	2、正式开发:排序API:
		arr.sort();
		问题1:默认将元素们转为字符串,按位PK每个字符的unicode号进行排序的,如果希望按数字排序?
		解决:
		arr.sort(function(a,b){//传参很奇怪,传入的居然是一个函数,而且还没有名字,意味着我们不能主动调用,这种函数叫做匿名回调函数						   	   //,往往是前辈们创建好,我们学习如何使用即可的东西

// console.log("执行了吗");//确实不需要我们调用,他会自动调用,而且还做了很多,悄悄的还有循环在里面 // console.log(a);//保存的是后一个数字 // console.log(b);//保存的是前一个数字 return a-b;//拿着后一个数字-前一个数字 //如果return返回的是一个正数,说明后一个数>前一个数 //如果return返回的是一个负数,说明后一个数<前一个数 //如果return返回的是一个0,说明后一个数==前一个数 //而我们sort方法会根据你返回的是什么数字,自动考虑要不要交换两者的位置 });

		问题2:希望降序排列:
		arr.sort(function(a,b){
			return b-a;
		})

	强调:排序其实非常重要,记住,以后只要页面中有排序功能,那么他的底层一定是一个数组,因为再JavaScript只有数组可以做排序

2、*栈和队列:添加元素和删除元素的新方式
	栈:其实就是数组,只不过是一端封闭,只能从另一端进出的数组
	何时使用:优先使用最新的数据,现实生活中:情况不多:旅游大巴、电梯
	如何:
		开头进:arr.unshift(新值1,...)
		开头出:var first=arr.shift();//调用一次只会删除一个
		缺陷:影响其他元素的下标/位置

		结尾进:*arr.push(新值1,...);
		结尾出:var last=arr.pop();//调用一次只会删除一个
		至少没有缺点

	队列:其实就是数组,只能从一端进,从另一端出
	何时使用:希望按照先来后到的顺序使用数据,现实中多的很
		开头进:arr.unshift(新值1,...)
		结尾出:var last=arr.pop();//调用一次只会删除一个

		结尾进:*arr.push(新值1,...);
		开头出:var first=arr.shift();//调用一次只会删除一个

2、二维数组:数组的元素,又引用着另一个数组 何时:在一个数组内,希望再次细分每个分类 创建: var arr=[ ["涂棚",18,"吃饭"], ["杨玉华",19,"睡觉"], ["程海峰",20,"学习"] ];

访问:arr[行下标][列下标];
特殊:面试题:
	列下标越界,返回undefined
	行下标越界,报错:行下标越界其实已经得到undefined,undefined没有资格使用[],所以报错了

遍历二维数组:必然两层循环,外层循环控制行,内层循环控制列
	for(var r=0;r<arr.length;r++){
		for(var c=0;c<arr[r].length;c++){
			console.log(arr[r][c])
		}
	}

总结:ES3的数组,你就算是完活了
	1、数组的基础(创建、访问、添加、length、遍历)
	2、数组的API:10个(转字符串、拼接、截取、删插替、翻转、排序、栈和队列)
	3、二维数组

3、*****String的概念: 什么是字符串:多个字符组成的【只读】字符【数组】(只读:明天我们要学习的所有的字符串API都不会修改原字符串,只会返回一个新字符串) 和数组有相同的地方: 1、字符串中的个数:str.length; 2、获取字符串中某个字符:str[i]; 3、遍历字符串得到每一个字符 4、所有数组不修改原数组的API,字符串也可以使用(concat、slice)

和数组也有很多不同的地方:
	1、所有数组直接修改原数组的API,字符串都不可以使用,比如排序只有数组可以使用,但是
	2、字符串也有很多属于自己的API,等待我们明天学习

***引用/对象类型:11个
	*String Number Boolean - 具有包装类型
	*Array *Function Date(日期) Math(数字) *RegExp(正则:验证)
	Error(错误)
	*Object(面向对象开发方式)
	Global(全局对象) - 在浏览器端(前端/客户端)中被window对象代替了 - 保存着全局变量和全局函数,只不过window可以省略不写
	只有前端的全局对象叫window,后端(Node.js)的全局对象还是叫global - 历史上第一次一门语言可以通吃前后端

***包装类型:专门用于将原始类型的值封装为一个引用类型的对象
	为什么:原始类型的值原本是不具备任何属性和方法,意味着原始类型的值本身是不支持.去做任何操作的
	              但是前辈们发现字符串经常会被我们程序员拿来做一些操作,
	              所以为了方便我们程序员,前辈们为这3个人提供包装类型(提供了属性和方法)
	何时使用:只要试图使用原始类型的变量调用属性或方法时,自动包装
	何时释放:方法调用完毕,自动释放包装类型,又变成了一个原始类型的值

为什么undefinednull不能使用. - 他们俩前辈们没有提供过包装类型 

作业: 1、手写冒泡 2、API排序试试(字符串、升序、降序) 3、队列:最low的轮播:广告位 扩展:周期性定时器:每过一段时间就会自动执行一次 开启: timer=setInterval(function(){ //操作 },间隔毫秒数)

		停止:
			clearInterval(timer)

		鼠标移入:onmouseover
		鼠标移出:onmouseout
4、淡入淡出的轮播 - 动画和js无关,和transition过渡相关