数组
一、冒泡排序
//冒泡排序
var arr=[23,9,78,6,45];
//外层循环,控制比较的轮数,比元素的个数少1
for (var i=1;i<arr.length;i++){
//长度是已知,每轮比较的次数
// 1 5 4
// 2 5 3
// 3 5 2
// 4 5 1
//内轮循环,控制每轮比较的次数,条件=数组长度-i
for(var j =0;j<arr.length-i;j++){
//j是下标,用当前的下标对应的元素和下一个元素进行比较
//下一个元素下标j+1
//arr[j] arr[j+1]
//变量交换
if(arr[j]>arr[j+1]){
var c =arr[j];
arr[j]=arr[j+1];
arr[j+1] =c;
}
}
}
//循环结束交换也就结束
console.log(arr);
二、数组api
1. reverse()翻转数组中的元素
2. sort()对数组元素进行排序,默认按照Unicode码从小到大排序
arr.sort( funcion(a,b){
return a-b;
})//a-b从小到大,b-a从大到小
3. join()将数组转字符串,可以指定分割符号,默认为,分割
var arr=['a','b','c','d'];
var str = arr.join('.');//必须是字符串
console.log(str);
4.concat()数组的拼接
var arr1=['a','b','c','d'];
var arr2=['aa','ba','sc','fdd'];
var arr3=['dfsa','fdb','fdsc','fsd'];
console.log(arr1.concat(arr2,arr3));//可以拼接多个数组,用,隔开
如何学习api
作用:
参数有哪些,哪些是必选的,哪些可选的
返回结果,调用手得到的结果是什么
5.slice()截取数组元素
slice(start,end) 截取数组中的元素,start表示开始的下标,end表示结束的下标,不包含end本身,end为空是截取到最后,如果下标是负数表示倒数,返回截取的元素,格式为数组
var arr=['张三','李四','王五','唐六','洪七','刘八','欧十']
console.log(arr.slice(1));//1到最后
console.log(arr.slice(1,3));//开始到结束,不包含后一个参数
练习
创建数组,包含a~g,每个字母代表一个元素,分别截取出cd,f;把截取> 的两部分拼接成一个新的数组
var arr=['a','b','c','d','e','f','g']; var a=arr.slice(2,4); console.log(a); var b=arr.slice(5,6); console.log(b); console.log(a.concat(b));
6.splice()删除数组元素
splice(start,count,v1,v2…)删除数组元素,strat表示开始的下标,count表示删除的数量,start是负数表示倒数,count为空表示删除到最后,v1,v2表示删除后补充的元素,返回删除的元素,格式为数组。
练习
创建数组,包含a~h,删除d,替换f为m,在下标为2的位置添加z
var arr=['a','b','c','d','e','f','g','h'];
console.log(arr.splice(3,1));
console.log(arr);
console.log(arr.splice(-3,1,'m'));
console.log(arr);
arr.splice(2,0,'z');
console.log(arr);
7.indexOf()检测数组中是否含有某个元素
indexOf()查找数组中是否有某个元素,如果找到多个返回第一个
练习
创建数组包含友善神福,敬业福,和谐福,如果不含有爱国福,则把该福添加到数组。
var arr=['友善福','敬业福','和谐福']; if( arr.indexOf('爱国福')===-1 ){ arr[arr.length] ='爱国福'; } console.log(arr);
8.push()数组末尾添加元素
push(v1,v2…) 在数组的末尾添加元素,返回数组的长度
var arr=['张一','李二','王三','唐四','洪五','刘六','欧七'];
console.log(arr.push('福星'));
console.log(arr);
9.pop()删除末尾元素
pop(v1,v2…)删除数组末尾的一个元素,返回删除的元素,只能一个个删除
var arr=['张一','李二','王三','唐四','洪五','刘六','欧七'];
console.log(arr.pop());
console.log(arr);
10.unshift(v1,v2…)数组的开头添加元素
在数组的开头添加元素,返回数组的长度,返回数组的长度
var arr=['张一','李二','王三','唐四','洪五','刘六','欧七'];
console.log(arr.unshift('福星'));
console.log(arr);
11.shift() 删除数组开头的一个元素
删除数组开头的一个元素,返回删除的元素
var arr=['张一','李二','王三','唐四','洪五','刘六','欧七'];
console.log(arr.shift());
console.log(arr);
三、二维数组
用于对一组数据进行二次分类
[ [], [], [] ]
访问 数组[下标][下标]
//省市
var arr1=['北京','江苏','广东','四川','重庆'];
//数组存放所有城市
var arr2=['东城区','西城区','海淀区','丰台区','南京','苏州','无锡','广州','深圳','珠海','成都','绵阳','简阳','崇州','渝北','渝中','九龙坡','南岸'];
var arr3=[
['东城区','西城区','海淀区','丰台区'],
['南京','苏州','无锡'],
['广州','深圳','珠海'],
['成都','绵阳','简阳','崇州'],
['渝北','渝中','九龙坡','南岸']
]
console.log(arr3[0][2]);
遍历二维数组练习
四、字符串对象
1.字符串对象
包装对象:为了让原始类型的数据像引用类型数据一样,具有属性和方法,提供了三种包装对象,字符串对象、数值对象、布尔对象
new String() 将数据转为字符串,返回对象
String() 将数据转为字符串,返回字符串
var str1 = '1'; //字面量
var str2 =new String(1);
var str3 =String(1);
console.log(str1,typeof str1);
console.log(str2,typeof str2);
console.log(str3,typeof str3);
2.String()他toString()区别
toString 方法
只能特定的对象才能调用
String()函数
可以将任意的数据转为字符串
3.转义字符\
1. ’ 将特殊的单引号转为普通的单引号,不再具有包裹字符串功能
2.\n 换行符 将n转义为换行符
3.\t 制表符 将t转义为制表符,产生多个 连续空格
4.字符串API
1. chatAt()
获取下标对应的字符,也可以使用数组形式,字符串[下标]
练习
遍历javascript,得到a出现的次数
var str='javascript';
for (var i=0,cont=0;i<str.length;i++){
if(str[i]==='a'){
cont++;
}
}
console.log(cont);
2. indexOf()
查找字符串出现的位置,返回满足条件第一个字符串出现的下标
2. lastIndexOF()
查找字符串出现的位置,返回满足条件最后一个字符串出现的下标,找不到返回-1
练习
声明变量保存用户输入的邮箱,查找邮箱中是否含有@,如果不含有则打印(’非法邮箱‘)
var email='122286911#qq.com';
if(email.indexOf('@')== '-1'){
console.log('非法邮箱');
}
3.toUpperCase()
英文字母转为大写
var str='JavaScript';
console.log(str.toUpperCase(str));
4.toLowerCase()
英文字母转为小写
var str='JavaScript';
console.log(str.toLowerCase(str));
5.slice()
slice(start,end)截取字符串,start开始的下标,end结束的下标,如果end为空截取到最后,截取的范围不包括end本身,如果下标是负数表示倒数
var str='JavaScript';
console.log(str.toLowerCase(str));
console.log(str.slice(4));//4到最后一位
console.log(str.slice(4,7));//4到6不包含7
console.log(str.slice(-3,-1));//-3到-2,不包含-1
练习
通过邮箱地址获取用户名和邮箱后缀
var email='dong123456@tedu.cn';
console.log(email.slice(email.indexOf('@')+1))
console.log(email.slice(0,email.indexOf('@')))
6.substr()
substr(start,count) 截取字符串,start开始的下标,count截取的数量,count为空截取到最后,start为负数表示倒数
练习
截取出一个身份证号码上的出生的年月份,性别(倒数第2位),最后打印出以下形式:1975年05月29日 性别男
var id='110235197505292294';
var year=id.substr(6,4);
var month=id.substr(10,2);
var day=id.substr(12,2);
var sex =id.substr(-2,1);
//判断性别是男还是女,第一种方法
var sexs= sex%2 ===1 ? '男' : '女' ;
//判断性别是男还是女,第二种方法
/*if(sex%2===0){
sex='女';
}else{
sex='男';
}
*/
console.log('出生时间为:'+year+'年'+month+'月'+day+'日');
console.log('性别:'+sexs);
7.split()
split(str)按照指定的字符串切割为数组,和数组下的join对应
arr.join(’/’)和str.split(’,’)相反的操作
练习
wu.wukong.png截取出一个文件的后缀名
var arr='sun.wukong.png';
var houzui=arr.split('.')
console.log(houzui[houzui.length-1]);
08作业-字符串练习
’hOW arE yOU‘ -> ‘How Are You’
var str='hOW arE yOU';
//按照空格将字符串转为数组
var arr=str.split(' ');
//遍历数组,得到每一个单词
for(var i=0;i<arr.length;i++){
//截取首个字母.转为大写
//生成一个新的字符串
var f = arr[i].substr(0,1).toUpperCase();
//截取其余的字符串,转为小写
var s = arr[i].substr(1).toLowerCase();
//把转换后的两部分拼接起来,替换之前的单词
arr[i]=f+s;
}
console.log(arr.join(' '));