JavaScript学习第四天——数组排序、冒泡排序、比较排序、对象

67 篇文章 0 订阅
49 篇文章 0 订阅

复习

​ 作用域:

​ 全局作用域:

​ 全局变量和全局函数

​ 在函数外部声明的变量是全局变量,可以使用var也可以不使用var,但建议使用var

​ 在内部申明的函数叫做全局函数

​ 局部作用域:

​ 局部变量和局部函数

​ 在函数内部申明的变量是局部变量

函数递归:

​ 在一些特殊的常量中,可以通过函数自己调用自己本身来减少循环量

注意事项:

​ 1.必须要有终止递归的条件(必须是带参的函数)

​ 递归的次数尽量控制在10之内

数组

​ 数组的声明:

​ var obj= new Array();

​ var obj=[];

数组的声明并赋值:

​ var arr = new Array(‘hi’,‘hello’);

数组的API:

​ pop():删除数组最后一个元素

​ push(value):在数组结尾处添加元素

​ push():获取数组的长度

​ join(value):把数组的元素后面添加字符然后转换蹭字符串

​ shift():删除第一个元素,数组元素下标全部往前移动

​ unshift(value):添加新的元素,数组元素下标全部往后移动

​ delete:不是方法;语法:数组名称[下标]:删除对应数组的下标元素

​ splice():向数组中添加新的元素

​ concat():合并两个数组称为一个新的数组

数组排序

冒泡排序:每次拿相邻的来那个为数去比较,按要求大(小)的往后排

比较排序:每次循环拿第一个数和后面所有的元素去比较,外循环结束,第一个数确定是第一轮的最大数或者是最小数,第二轮外循环拿第二个数与后面的数依次进行比较

比较排序

拿第一个元素依次和后面的元素进行比较,比自身小的就交换元素,

比如:第一次循环(下标0的元素):拿下标为0的元素5跟下标为1的元素1比较,1比5小,两者换位置,1换到下标为0的位置,5到下标为1的位置;再拿1跟10比较,1比10小,不交换位置;再拿1跟18交换,1比18小,不交换位置,依次类推;1最小,就在下标为0的位置;

第二次循环(下标为1的元素):下标为1的元素5和下标为2的10比较,5比10小,不交换位置,再和下标为3的元素18比较,5比18小,不交换位置;再和下标为4的元素3比较,5比3大,交换位置,3换到下标为1的位置,5换到下标为4的位置;然后再拿3和下标为5的元素12进行比较……

以此类推的进行比较,找出最小数,往前放;从前往后的确定数值

比较排序:第一次循环是先拿下标为0的元素分别与后面的元素进行比较;此时循环结束,确定了一个数,减少一个需要确定的元素和一个下标。还剩n-1个元素比较

第二次循环是拿下标为1的元素分别与后面的元素进行比较;n-2;

第三次循环是拿下标为2的元素分别与后面的元素进行比较;n-3;

第四次循环是拿下标为3的元素与后面的元素进行比较;

/* 
比较排序 
 */

var arr = [5, 1, 10, 18, 3, 12, 9, 7, 20];
for(var i = 0;i<arr.length-1;i++) {
	for(var j=i+1;j<arr.length;j++) {
		 /* 
		 比较排序的代码:第二个循环里的表达式:arr[j]>arr[j+1];
		 外循环的第一次循环,拿下标为0的元素分别去与后面的元素进行比较,获得结果,交换位置,再继续用下标为0的元素依次与后面的元素进行比较
		 冒泡排序的代码:第二个循环里的表达式:arr[i]<arr[j];
		 外循环的第一次循环,先拿下标为0的与相邻的下标为1的元素进行比较,得结果后,再拿下标为1的元素与下标为2的元素进行比较,依次与后面相邻的元素进行比较
		 */
		if(arr[i]>arr[j]) {
			var t = arr[i];
			arr[i]=arr[j];
			arr[j]= t;
		}
	}
}
console.log(arr);


var arr = [2, 3, 9, 4, 8, 6, 1, 5, 7];
for (var i = 0; i < arr.length - 1; i++) {
	for (var j = i + 1; j < arr.length; j++) {
		if (arr[i] > arr[j]) {
			var t = arr[i];
			arr[i] = arr[j];
			arr[j] = t;
		}
	}
}
console.log(arr);

冒泡排序
// 冒泡排序
var arr = [10,11,5,1,9,20,3,8,6,15];
for(var i = 0;i<arr.length-1;i++) {
	for(var j = 0;j<arr.length-i;j++) {
		if(arr[j]<arr[j+1]) {
			var temp = arr[j+1];
			arr[j+1]=arr[j];
			arr[j] = temp;
		}
	}
}
alert(arr);

js对象

stack:栈内存

普通内存:以键值对类型存储

heep:推内存

通过new创建的对象,对象名存在栈内存里面,内容是存在推内存里面。对象名存的是地址值,是指向在推内存内的内容。

new就是在内存开闭一个空间,给相应的对象;对象存的是地址值,

1.用户自己定义的对象

​ 创建方式:

​ 1.通过关键字new创建

​ var obj = new Object();

​ obj.name = ‘xxx’;

​ obj.age=18;

构造器是一个特殊的函数,必须和对象名称一致当我们创建对象时就会去调用构造器

​ 1.1使用无参的构造器

var p= new Object();
p.name='aa';
p.age=20;
p.sex='女';
p.tel=1564894512;

​ 1.2使用有参的构造器

// 自定义构造器
function Person(name,age,sex) {
	this.name=name;
	this.age=age;
	this.sex=sex;
}

​ 2.通过对象字面量创建

使用字面量来创建:{}表示一个对象,对象的属性采用的是属性名:属性值,属性和属性之间用逗号隔开,最后一个属性不需要。属性名称可以使用双引号,也可以不使用

// 方式一:对象字面量
var p ={
	name:'aa',
	age:20,
	sex:'女',
	tel:1564894512
}
/*
 用户自定义对的相关介绍
 */
// 初始化对象
var obj = new Object();
obj.name="aaa";
console.log(obj);
console.log(obj.name);
var a = 10;
var b = a;
a=20;
console.log('a:'+a+'b:'+b);
var obja = new Object();
obja.age=20;
var objb = obja;
objb.age = obja.age;
obja.age=30;
console.log('obja:'+obja.age+'objb:'+objb.age);
/* 
	构造器是一个特殊的函数,必须和对象名称一致,当我们创建对象的时候就会去调用构造器
 */
// 自定义构造器
function Person(name,age,sex) {
	this.name=name;
	this.age=age;
	this.sex=sex;
}

var p = new Person('aa','b',20);
alert('name:'+p.name+'age:'+p.age+'sex:'+p.sex);
// 使用字面量来创建:{}表示一个对象,对象的属性采用的是属性名:属性值,属性和属性之间用逗号隔开,最后一个属性不需要。属性名称可以使用双引号,也可以不使用
var l = {
	name:'aaa',
	age:20,
	sex:'女'
}
console.log()


**练习:**分别用三种创建一个对象,给对象设置属性name,age,sex,tel的值,然后修改name和sex的值。然后输出在控制台

// 方式一:对象字面量
// var p ={
// 	name:'aa',
// 	age:20,
// 	sex:'女',
// 	tel:1564894512
// }
// 方式二:无参构造器
var p= new Object();
p.name='aa';
p.age=20;
p.sex='女';
p.tel=1564894512;

// 方式三:有参构造器
// function Person(name,age,sex,tel) {
// 	this.name=name;
// 	this.age=age;
// 	this.sex=sex;
// 	this.tel=tel;
// }
// var p =new Person('aa',20,'女',1564894512);


p.name ='bb';
p.sex='男';
console.log('name:'+p.name+'\nage:'+p.age+'\nsex:'+p.sex+'\ntel:'+p.tel);

2.js提供的学习对象

Math:数学类对象
属性
属性描述
E返回算术常量 e,即自然对数的底数(约等于2.718)。
LN2返回 2 的自然对数(约等于0.693)。
LN10返回 10 的自然对数(约等于2.302)。
LOG2E返回以 2 为底的 e 的对数(约等于 1.4426950408889634)。
LOG10E返回以 10 为底的 e 的对数(约等于0.434)。
PI返回圆周率(约等于3.14159)。
SQRT1_2返回 2 的平方根的倒数(约等于 0.707)。
SQRT2返回 2 的平方根(约等于 1.414)。
方法
方法描述
abs(x)返回 x 的绝对值。
acos(x)返回 x 的反余弦值。
asin(x)返回 x 的反正弦值。
atan(x)以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x)返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x)对数进行上舍入。
cos(x)返回数的余弦。
exp(x)返回 Ex 的指数。
floor(x)对 x 进行下舍入。
log(x)返回数的自然对数(底为e)。
max(x,y,z,…,n)返回 x,y,z,…,n 中的最高值。
min(x,y,z,…,n)返回 x,y,z,…,n中的最低值。
pow(x,y)返回 x 的 y 次幂。
random()返回 0 ~ 1 之间的随机数。random()*10:1-10的随机数
round(x)四舍五入。
sin(x)返回数的正弦。
sqrt(x)返回数的平方根。
tan(x)返回角的正切。

练习:定义两个数组(全是数组)

1.求出两个数组的最大值,然后把这两个最大值一起通过Math类进行比较出最大值之间的最大值

2.请求两个数组的平均值,然后通过Math类对两个数组的平均值进行四舍五入,还有向上舍入和向下舍入。

3.通过Math类生成随机数添加到两个数组中

var arr1 = [13, 2, 16, 6, 18, 2, 5, 29];
var arr2 = [9, 14, 22, 19, 24, 2, 5, 27];

var max1 = arr1[0];
var max2 = arr2[0];
var sum1=0;
var sum2=0;

for (var i = 0; i < arr1.length; i++) {
	var num = arr1[i];
	if (max1 < arr1[i]) {
		max1 = arr1[i];
	}
	sum1+=num;
}
for (var i = 0; i < arr2.length; i++) {
	var num = arr2[i];
	if (max2 < arr2[i]) {
		max2 = arr2[i];
	}
	sum2+=num;
}
console.log('arr1的最大值:'+max1);
console.log('arr2的最大值:'+max2);
console.log('max1和max2之间的最大值:'+Math.max(max1,max2));
var avg1=sum1/arr1.length;
var avg2=sum2/arr2.length;

console.log('arr1的平均值'+avg1);
console.log(avg1+"的四舍五入为:"+Math.round(avg1));
console.log(avg1+"的上舍入为:"+Math.ceil(avg1));
console.log(avg1+"的下舍入为:"+Math.floor(avg1));

console.log('arr2的平均值'+avg2);
console.log(avg2+"的四舍五入为:"+Math.round(avg2));
console.log(avg2+"的上舍入为:"+Math.ceil(avg2));
console.log(avg2+"的下舍入为:"+Math.floor(avg2));

var number1=parseInt(Math.random()*10);
arr1.push(number1);
console.log('arr1添加的随机数为:'+number1);
var number2=parseInt(Math.random()*10);
arr2.push(number2);
console.log('arr2添加的随机数为:'+number2);
console.log(arr1);
console.log(arr2);

Date时间类

方法

方法描述
Date()返回当日的日期和时间。
getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth()从 Date 对象返回月份 (0 ~ 11)。
getFullYear()从 Date 对象以四位数字返回年份。
getYear()请使用 getFullYear() 方法代替。
getHours()返回 Date 对象的小时 (0 ~ 23)。
getMinutes()返回 Date 对象的分钟 (0 ~ 59)。
getSeconds()返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds()返回 Date 对象的毫秒(0 ~ 999)。
getTime()返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset()返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate()根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay()根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCMonth()根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCFullYear()根据世界时从 Date 对象返回四位数的年份。
getUTCHours()根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMinutes()根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCSeconds()根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getUTCMilliseconds()根据世界时返回 Date 对象的毫秒(0 ~ 999)。
parse()返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate()设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth()设置 Date 对象中月份 (0 ~ 11)。
setFullYear()设置 Date 对象中的年份(四位数字)。
setYear()请使用 setFullYear() 方法代替。
setHours()设置 Date 对象中的小时 (0 ~ 23)。
setMinutes()设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds()设置 Date 对象中的秒钟 (0 ~ 59)。
setMilliseconds()设置 Date 对象中的毫秒 (0 ~ 999)。
setTime()以毫秒设置 Date 对象。
setUTCDate()根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCMonth()根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCFullYear()根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours()根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMinutes()根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCSeconds()根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
setUTCMilliseconds()根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
toSource()返回该对象的源代码。
toString()把 Date 对象转换为字符串。
toTimeString()把 Date 对象的时间部分转换为字符串。
toDateString()把 Date 对象的日期部分转换为字符串。
toGMTString()请使用 toUTCString() 方法代替。
toUTCString()根据世界时,把 Date 对象转换为字符串。
toLocaleString()根据本地时间格式,把 Date 对象转换为字符串。
toLocaleTimeString()根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleDateString()根据本地时间格式,把 Date 对象的日期部分转换为字符串。
UTC()根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。
valueOf()
/* 
 通过时间类来判断某个代码块的效率问题
 
 */

var d = new Date();
var star_time = d.getMilliseconds();
console.log('开始时间:' + star_time);
var sum = 0;
for (var i = 0; i < 10000; i++) {
	// console.log('i:'+i);
	// console.log("操作执行");
	sum += i;
}
var end_time = d.getMilliseconds();
console.log('结束时间:' + end_time);
console.log("代码块执行的毫秒数:" + (end_time - star_time));

// 初始化对象
var d = new Date ();
console.log(d);				//调用默认构造器创建的对象输出的格式:Fri Mar 26 2021 16:12:15 GMT+0800 (中国标准时间)

var date1 = new Date('3/26/2021 16:10:26');
console.log(date1);
console.log('返回一个月中的某一天:'+d.getDate());
console.log('返回一周中的某一天:'+d.getDay());
console.log('返回一年中的某一个月:'+d.getMonth());		//0-11
console.log('返回年份:'+d.getFullYear());
console.log('返回小时:'+d.getHours());
console.log('返回分钟:'+d.getMinutes());
console.log('返回秒:'+d.getSeconds());
console.log('返回毫秒:'+d.getMilliseconds());
console.log('返回从1970年1月1日开始计算的毫秒数:'+d.getTime());
console.log(d.toDateString());
console.log("根据本地的时间格式把d:"+d.toLocaleDateString());

练习:创建一个时间类,获取当前时间的在一个月内的天数,在一周你弟的星期数,获取当前时间的年份,获取当前时间的毫秒数,然后获取当前时间按照中国的年份/月/日输出时分秒

var d = new Date();

console.log('在一个月中的天数:'+d.getDate());
console.log('在一个周中的星期数:'+d.getDay());
console.log('今年的年份:'+d.getFullYear());
console.log('当前时间的毫秒数:'+d.getSeconds());
console.log("中国的格式:"+d.toLocaleDateString()+"\t"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());





String

属性

属性描述
constructor对创建该对象的函数的引用
length字符串的长度
prototype允许您向对象添加属性和方法

方法

方法描述
anchor()创建 HTML 锚。
big()用大号字体显示字符串。
blink()显示闪动字符串。
bold()使用粗体显示字符串。
charAt()返回在指定位置的字符。
charCodeAt()返回在指定的位置的字符的 Unicode 编码。
concat()连接字符串。
fixed()以打字机文本显示字符串。
fontcolor()使用指定的颜色来显示字符串。
fontsize()使用指定的尺寸来显示字符串。
fromCharCode()从字符编码创建一个字符串。
indexOf()检索字符串。
italics()使用斜体显示字符串。
lastIndexOf()从后向前搜索字符串。
link()将字符串显示为链接。
localeCompare()用本地特定的顺序来比较两个字符串。
match()找到一个或多个正则表达式的匹配。
replace()替换与正则表达式匹配的子串。
search()检索与正则表达式相匹配的值。
slice()提取字符串的片断,并在新的字符串中返回被提取的部分。
small()使用小字号来显示字符串。
split()把字符串分割为字符串数组。
strike()使用删除线来显示字符串。
sub()把字符串显示为下标。
substr()从起始索引号提取字符串中指定数目的字符。
substring()提取字符串中两个指定的索引号之间的字符。
sup()把字符串显示为上标。
toLocaleLowerCase()把字符串转换为小写。
toLocaleUpperCase()把字符串转换为大写。
toLowerCase()把字符串转换为小写。
toUpperCase()把字符串转换为大写。
toSource()代表对象的源代码。
toString()返回字符串。
valueOf()返回某个字符串对象的原始值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值