数组
一、创建一个数组
1)创建数组字面量,数组中可以存放任意类型的数据;
var emp=['tom','jeck',10,true,'lili','kk']; console.log(emp);
2)使用内置构造函数创建数组
方法1:
var car=new Array('大众','大众1','大众2'); console.log(car);
方法2:
var car=new Array(3); // 往数组中添加元素——使用下标 car[0]='大众'; car[1]='大众1'; car[2]='大众2'; console.log(car);
3)访问数组中的元素(数组名称下标,下标是从0开始)
例1:
// 创建数组,初始化长度为5,添加5个课程 var classes=new Array(5); classes[0]='语文'; classes[1]='英语'; classes[2]='数学'; classes[3]='美术'; classes[4]='历史'; console.log(classes);
// 查看数组中元素个数
console.log(classes.length);
例2:
// 创建数组,直接添加5个员工姓名 var emp=new Array('tom','jeck','lili','scoc','jones') console.log(emp);
例3:自动加元素
// 创建数组,初始化长度为5,添加5个课程 var classes=[]; classes[classes.length]='语文'; classes[classes.length]='英语'; classes[classes.length]='数学'; classes[classes.length]='美术'; classes[classes.length]='历史'; console.log(classes);
console.log(classes[3]);
4) 数组的分类和遍历
数组的分类分为两组:索引数组和关联数组
索引数组:以整数作为下标
关联数组:以字符串作为下标
例1:
// 创建关联数组 var arr=[]; // 添加元素 arr['eid']=1; arr['ename']='tom';
arr[0]=20; console.log(arr);
结果:[eid:1,ename:'tom',20]
遍历数组中的元素:for 循环只能遍历下标是数字的;
方法1:使用for循环遍历数组元素的下标,只能遍历索引数组
var score=[89,87,34,56,78,90,73]; // 遍历数组中每个元素的下标 for(var i=0;i<score.length;i++){ console.log(i+'----'+score[i]); }
例1:
// 创建数组,保存所有员工的工资,使用for循环遍历获取平均工资 var salary=[1000,2000,3000,4000,5000]; for(var i=0,sum=0;i<salary.length;i++){ console.log(salary[i]); sum+=salary[i]; } // 打印平均工资 console.log(sum/salary.length);
例2:
// 创建数组,这个数组中保存4个汽车的品牌名称,把品牌名称为宝马的改为BM var brand=['奥迪','雷克撒斯','宝马','奔驰']; // 使用循环遍历元素 for(var i=0;i<brand.length;i++){ if(car[i]=='宝马'){ console.log(i); // 修改元素值 car[i]='BM'; } } console.log(car);
方法2:for-in遍历,数组下标是字符串的类型,即可以遍历索引数组又可以遍历关联数组
例1:
var book=[]; // 添加元素 book['id']=113; book['title']='水浒传'; book['price']=223; book['pubTime']='2001-10-1'; console.log(book); // 使用for-in来遍历 for(var key in book){ console.log(key+'---'+book[key]); }
例2:
// 创建数组,包含元素 推荐、热点、娱乐、财经,分别使用for循环和for-in遍历该数组中的元素 var blogs=['推荐','热点','娱乐','财经']; // 使用for循环来遍历 for(var i=0,i<blogs.length,i++){ console.log(i+'---'+blogs[i]); } // 使用for-in遍历 for(var key in blogs){ console.log(key+'---'+blogs[key]); }
例3:
/*练习:创建一个函数,在这个函数中传递2个参数(数组+字符串), 返回字符串的下标,如果找不到该字符串的下标,则返回-1 getIndex(['a','b','c','d'])*/ function getIndex(arr,str){ for(var i=0;i<arr.length;i++){ // 判断数组元素中是否含有str这个值 if (arr[i]==str){ return i; } }
return -1;
} var res=getIndex(['推荐','热点','娱乐','财经'],'热点'); console.log(res);
例4:
// 创建函数getAvg,传递1个参数(数组表示所有的工资),返回平均工资 function getAvg(salary){ // 获取平均值 for(var i=0,sum=0;i<salary.length,i++){ sum+=salary[i]; } return sum/salary.length; } var res=getAvg([8000,2000,2000,5000]); console.log(res);
例5:
// 创建函数getCount,传递2个参数(数组,字符串),返回字符串在数组元素中出现的次数 // getCount(['tom','jerry','tom','david'],'tom') function getCount(arr,str){ for(var i=0,j=0;i<arr.length,i++){ if arr[i]==str: j++; } return j; } var res=getCount(['tom','jerry','tom','david'],'tom'); console.log(res);
例6:
// 创建函数getMax,传递1个参数(数组),返回数组中元素的最大值 // getMax([88,72,93,66]); // 93 function getMax(){ var max=arr[0] for(var i=0;i<getMax.length,i++){ // 使用数组中的每一个元素和max比较 // 如果max小于数组元素,则把元素放入max中 if(max<arr[i]){ max=arr[i]; } } return max; } var res=getMax([88,72,93,66]); console.log(res);
5) 数组中的方法(API---应用程序接口,预先定义好的函数/方法)
toString() 将数组中的元素按照,分割为字符串
var arr=['推荐','热点','娱乐','财经']; // 将数组中的元素转为字符串,数组中元素使用逗号分隔 console.log(arr.toString());
length() 将数组中的元素按照,分割为字符串
var arr=['推荐','热点','娱乐','财经']; // 按照指定的字符分割数组中的元素 console.log(arr.join('|'));
concat() 拼接数组
var arr1=['推荐','热点','娱乐','财经']; var arr2=['推荐1','热点2','娱乐3','财经4']; console.log(arr1.concat(arr2));
列1:
// 练习:创建3个数组,分别存储不同的员工姓名,将3个数组拼接成一个新的数组 var arr1=['推荐','热点','娱乐','财经']; var arr2=['推荐1','热点2','娱乐3','财经4']; var arr3=['推荐a','热点b','娱乐c','财经d']; console.log(arr1.concat(arr2,arr3));
slice() 截取数组中的元素
// 截取数组中的元素 var arr1=['推荐','热点','娱乐','财经']; // 截取热点和娱乐两项 console.log(arr1.slice(1)); // 截取范围2~最后 console.log(arr1.slice(2,4)); // 截取范围2~4,截取到2和3两项,负数表示倒数
例1:
// 创建数组,保存a-h,每个元素存储1个字母,截取bc和ef,拼接成一个新的数组 var arr=['a','b','c','d','e','f','g','h']; var arr1=arr.slice(1,3); var arr2=arr.slice(4,6); console.log(=arr2.concat(arr1));
splice() 删除
例1:
// 删除数组中的元素 var arr1=['推荐','热点','娱乐','财经']; // 返回的是删除的元素,写一个参数就是从这个参数往后全部删掉 console.log(arr1.splice(1,2)); // 剩下的元素 console.log(arr1);
例2:删除2个添加2个
var arr1=['推荐','热点','娱乐','财经']; arr1.splice(2,2,'新闻','旅游'); console.log(arr1);
例3:
// 创建数组,包含a-h,每个元素存储1个字母,删除d,e;替换f为m,在下标为1的位置插入字母z var arr=['a','b','c','d','e','f','g','h']; arr.splice(3,3,'m'); // ['a','b','c','m','g','h'] arr.splice(1,0,'z'); // ['a','z',b','c','m','g','h'] console.log(arr);
reverse() 反转数组中的元素
例1:
// 翻转数组中的元素 var arr=['a','b','c','d']; console.log(arr.reverse());
sort() 按照unicode码排序
// 对数组元素进行排序 var arr=[70,65,102,90,82,231]; //console.log(arr.sort()); // 默认按照unicode码排序 console.log(arr.sort(function(a,b){ return a-b; // a-b从小到大排序 b-a从大到小排序 }));
6) 冒泡排序
例1:
// 冒泡排序 var arr=[78,6,23,8,3] // 从小到大排序 // 外层循环:比较4轮(循环4次) for(var i=1;i<arr.length;i++){ // 内层循环比较的次数,J代表元素的下标 for(var j=0;j<arr.length-i;i++){ // 交换两个元素的值 // 如果当前元素大于下一个元素,则交换两个元素的值 if(arr[j]>arr[j+1]){ var tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } console.log(arr);
push() 在数组后追加元素,返回的是数组的长度
例1:
// 数组的方法 var arr=['推荐','热点','娱乐']; // 往数组的末尾添加元素 // 方法1 arr[arr.length]='新闻'; console.log(arr); // 方法2 arr.push('汽车'); console.log(arr);
unshift() 往数组的开头添加元素,返回的是数组长度
例1:
var arr=['推荐','热点','娱乐']; // 往数组开头添加元素,返回数组的长度 console.log(arr.unshift('体育')); console.log(arr)
pop() 删除数组末尾的元素,返回删除的元素
例1:
// 数组的方法 var arr=['推荐','热点','娱乐']; // 在数组结尾删除 console.log(arr.pop());
shift() 删除数组开头的元素 ,返回删除的元素
例1:
var arr=['推荐','热点','娱乐']; console.log(arr.shift()); console.log(arr);
7)二维数组(数组中的每一个元素也是数组)、包装对象
例1:
// 省市二级联动菜单 var arr=['北京','广东','江苏']; var city=[ ['海淀区','东城区'], ['广州','深圳'], ['南京','苏州'] ]; // 访问二维数组中的元素,找到深圳 console.log(city[1][1]);
字符串操作——包装对象:目的是让原始类型的数据也可以像引用类型一样具有属性和方法。
JS提供了3中数据类型:String Number Boolean
例1:
// 将数据包装成字符串对象 var str1='hello'; console.log(typeof(str1)); // string // 构造函数形式,将任意数据包装成字符串对象 var str2=new String('hello'); console.log(str2); console.log(typeof(str2)); // object // 强制转换为字符串,返回字符串 var str3=String('hello'); console.log(typeof(str3)); // string