- ***数组API:
*栈和队伍:其实都是数组,只不过使用了不同的方法
栈:一端封闭,只能从另一端进出的*数组*
何时使用栈:只能从数组一端进出
结尾出入栈:
入栈:arr.push(新值); ==>arr.[arr.length]=新值;
出栈:var last=arr.pop();
案例:
var bus=[];for(var i=0;i<5;i++){ bus.push("乘客"+i); alert(bus);}while(bus.length>0){ var cust=bus.pop(); alert(cust+"下车\n"+bus);}
开头出入栈:
入栈:arr.unshift(新值);
出栈:var first=arr.shift();
var bus=[];for(var i=0;i<5;i++){ bus.unshift("乘客"+i); alert(bus);}while(bus.length>0){ var cust=bus.shift(); alert(cust+"下车\n"+bus);}
现实中的排队效果:push shift 组合
队列:只能从一端进入,必须从另一端出
何时使用:只要先到的先得
结尾入队列:arr.push(新值)
开头出队列:var first=arr.shift();
案例:排队买手机
var shen=5;var queue=[]; for(var i=0;i<6;i++){ queue.push("顾客"+i); alert(queue); } while(shen>0){ var cust=queue.shift(); shen--; alert(cust+"抢购成功\n"+queue+"\n剩余:"+shen); }alert(queue+"抢购失败");
2.二维数组:数组的元素又引用了另一个子数组
何时使用:保存横行数列的二维数据;保存上下级关系的数据
如何创建:2步
1.创建一个空数组:var data=[];
2.设置数组中每个元素再引用另一个小数组:date[0]=[0,0,0,0]
访问二维数组中任意位置的元素:data[r][c]
随机生成一个数,插入2:
var data=[ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0],]; var r=Math.floor(Math.random()*4); var c=Math.floor(Math.random()*4); data[r][c]=2; var html=data.join("<br>"); document.write(html);
二维数组行下标r不能越界,越界就报错
遍历二维数组:固定套路:外层循环遍历当前行中的列
需要手写的固定套路
for(var r=0;r<data.length;r++){ for(var c=0;c<data[r].length;c++){ 当前元素:data[r][c] }}
3.***字符串对象:多个字符串组成的只读*数组*
和数组相同的API:
访问字符串中任意一个字符:str[i]
字符串的长度:str.length
凡是不直接修改原数组的API,字符串都能用:
比如 var substr=str.slice(starti,endi+1);
var newstr=str.concat(otherstr);
不能用: reverse() push() str[i]="字符"
内置对象:11个
ES标准已经规定好,由浏览器厂商已经实现的对象
开发人员直接使用,不必关心具体实现。
String Number Boolen --包装类型
Array Date RegExp Math
Error
Function Object
Global-->window
4.查找关键字:
vari=str.indexOf("kword"[,starti]);//找右下侧一个,默认从头开始
str.lastIndexOf("kword"[,starti]);//找左下侧一个,默认结尾开始
lastIndexOf只要关键字第一字符<=当前位置
例1:
/*顺位查找关键字的位置*/ var str="no zuo no die no can no bi bi"; var i=str.indexOf("no"); console.log("在位置"+i+"发现关键字");
例2:
/*倒序查找关键字的位置*/ var str="no zuo no die no can no bi bi"; var i=-1; while((i=str.indexOf("no",i+1))>=0){ alert("在位置"+i+"发现关键字"); }
例3:
从后面开始查找关键字:
/*查找关键字的位置*/ var str="no zuo no die no can no bi bi"; var i=str.length; while((i=str.lastIndexOf("no",i-1))>=0){ alert("在位置"+i+"发现关键字"); if(i==0){//防止0位置刚好出现关键字时,出现死循环 break; } }
截取字符串的方法 3种:
varsub=str.slice(starti,endi+1);//获取两数之间的字符串,
str.substring(starti,endi+1);//不支持负数,提取字符串中介于两个指定下标之间的字符
str.substr(starti,n);//用于返回一个从指定位置开始的指定长度的子字符串