数组:一组变量的集合,起一个统一的名字。
如何使用数组:建立 取值 赋值
建立:共四种数组
建立空数组:var 数组名=[]; var 数组名=new Array();优化
什么时候使用:暂时不知道数据内容,先建立空数组,再追加
建立同时初始化数组内容:var 数组名=[值1,值2,...]code
什么时候使用:建立时,就已经知道数组的内容
建立指定元素个数的数组: var 数组名=new Array(n);建立一个新数组对象,同时初始化n个空元素对象
建立同时初始化数组内容:var 数组名=new Array(值1,值2,...)排序
var week=["日","一","二","三","四","五","六"]; 0 1 2 3 4 5 6 console.log("今天星期"+week[5]);
数组中每一个元素<==>一个变量: 用法和变量彻底相同!索引
2. 取值:获取数组中指定位置的元素内容 下标:数组中标识每一个元素位置的序号 默认,自动从0开始,每一个+1,到元素个数-1结束 如何取值:var 元素的值=数组名[下标]; 3. 赋值:将新值放入指定位置的元素中保存 如何赋值:数组名[下标]=新值; 数组是引用类型的对象: 数组名做为变量赋值或参数传递时,都是将地址值复制给对方 后果,对方修改数组的内容,访问原数字名也会受影响 null: 主动释放一个对象的引用。null自己是原始类型的值 垃圾回收器:伴随主程序,同时运行的后台程序 记录每一个对象当前被引用的次数 被引用的次数==0,垃圾回收器自动释放对象内存空间 强烈建议:在使用完,较大对象后,主动赋值为null,老是好习惯
获取数组的元素个数:arr.length属性,不加圆括号
固定套路:
得到数组最后一个元素:arr[arr.length-1];内存
向数组末尾追加一个新元素:arr[arr.length]=新值 js中的数组 vs 其余语言中的数组:3个区别: 1. 不限制元素的数据类型 2. 不限制数组长度 3. js的数组越界不会出错! 赋值时:自动建立制定下标的元素,保存新值 length属性,会随最大下标而变化 取值时:视图从没有的下标位置取值,返回undefined
遍历数组:从第0个元素开始,依次获取每一个元素,字符串
对每一个元素执行相同的操做 下标:遍历数组时,天生的循环变量!
var emps=[]; var input=''; while((input=prompt("输入员工姓名"))!="exit"){ emps[emps.length]=input; } console.log(emps);
var arr=[2,5,4,6,7,9]; function getMax(arr){ var max=arr[0]; for(var i=1;i<arr.length;i++){ arr[i]>max&&(max=arr[i]); } return max; } console.log(getMax(arr));//获取数组中最大值
//获取元素下标的位置 function indexOf(arr,elem){ for(var i=0;i<arr.length;i++){ if (arr[i]==elem) { return 1; } else{ return -1; } } } var emps=["A","B","C","E"]; console.log(indexOf(emps,prompt("输入要查找的姓名")));
//冒泡排序get
function myArr(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } var arr=[12,4,9,21,43,3]; myArr(arr); console.log(arr);
数组的API:
关联数组(hash数组):可自定义元素下标名称的数组(关联数组是字符串)
索引数组:自动从0开始分配连续不重复的序号下标
如何建立关联数组:2种方式:input
1. 先建立普通空数组,再追加自定义下标的元素 var ym=[]; ym["sname"]="MM"; ym["A"]=81; ym["B"]=53; ym["C"]=89; *关联数组的length属性失效* *关联数组中的key不能重复* 关联(hash)数组优点:查找极快!和元素个数无关! 2. 建立数组同时,初始化元素内容: var mm={"sname":"MM","A":81,"B":53,"C":89}; key value 关联数组中保存的是多个key/value对儿 键 值
//数组去重
var arr=[2,2,4,5,3,6,5,3]; function myArr(arr){ var arr1=[]; for(var i=0;i<arr.length;i++){ if(arr1.indexOf(arr[i])==-1){ arr1.push(arr[i]); } } return arr1; } console.log(arr); console.log(myArr(arr));
如何遍历关联数组:
for(var key in arr){ //依次取出arr中每一个key,存在变量key中 arr[key]-->得到当前正在遍历的key中存储的值 }
## 数组API ##
数组转换成字符串:有两种方法
var str=arr.toString(); 默认只能以逗号分隔每一个元素。
var str=arr.join("链接符");自定义元素间的链接符
固定套路:
将字符数组,无缝拼接为单词:
好比: var chars=["H","e","l","l","o"];
将单词数组,拼接为句子:
将数组转化为页面上的列表/选择元素:
优化:频繁字符串拼接,推荐使用数组的join方法做为替代
步骤:
先将要拼接的子字符串,放入一个数组中,临时保存
遍历结束后,一次性join成一个完整字符串
var words=["we","two","who","and","who"]; var str=words.join(" "); console.log(str);//we two who and who
链接数组和获取子数组:不修改原数组对象,返回新数组对象
concat: var newArr=arr.concat(值1,值2,[值3,值4].....) slice: var subArr=arr.slice(starti[,endi+1]); starti: 开始的位置下标 endi: 获取到的位置下标 ***含头不含尾*** slice支持倒数下标 省略endi,从starti一直取到结尾
var arr=[1,4,3]; var arr1=[22,44]; var newArr=arr.concat(13,134,arr1); console.log(arr);
splice:删除,插入,替换任意位置的任意个元素
***直接修改原数组 删除:splice(starti,n);//starti
var arr=[1,2,4,4,5]; var id=arr.splice(2,2); console.log(arr); console.log(id);