数组方法总结
- 从数组末尾删除一项
- ary.length--;
- ary.length-=1
- ary.length=ary.length-1
- ary.pop()
- ary.splice(ary.length-1,1)
- 给数组末尾增加一项
- ary[ary.length]=xxx
- ary.push()
- ary.splice(ary.length,0,'xxx')
- 数组的克隆方法
- slice()
- slice(0)
- ary.concat()
- ary.splice(0) 返回值是克隆
选项卡封装
- 功能
- 可以让一个页面中多个容器都有选项卡的功能
- 通过第二个参数 设置默认点亮项
- 参数可有可无 是用||的思想 ‘’或‘’
var selectIndex=selectIndex%aBtn.length||0; - %的思想
var selectIndex=selectIndex%aBtn.length||0; - 一个选项卡代码(自定义)
var oWrap=document.getElementsByTagName('div')[0];
var aBtn=oWrap.getElementsByTagName('li');
var aDiv=oWrap.getElementsByTagName('div');
for(var i=0;i<aBtn.length;i++){
aBtn[i].index=i;
aBtn[i].onclick=function(){
for(var i=0;i<aBtn.length;i++){
aBtn[i].className='';
aDiv[i].className='';
}
aBtn[this.index].className='on';
aDiv[this.index].className='show';
}
}
- 闭包写选项卡代码
for(var i=0;i<aBtn.length;i++){
(function(index){
aBtn[i].onclick=function(){
for(var i=0;i<aBtn.length;i++){
aBtn[i].className='';
aDiv[i].className='';
}
aBtn[index].className='on';
aDiv[index].className='show';
}
})
(i)
}
封装选项卡
function tab(id,selectIndex){
var oWrap=document.getElementById(id);
var aBtn=oWrap.getElementsByTagName('li');
var aDiv=oWrap.getElementsByTagName('div');
oWrap.style.width=aBtn.length*200+'px';
selectIndex=selectIndex%aBtn.length||0;
function on(seIndex){
for(var i=0;i<aBtn.length;i++){
aBtn[i].className='';
aDiv[i].className='';
}
aBtn[seIndex].className='on';
aDiv[seIndex].className='show';
}
on(selectIndex);
/*for(var i=0;i<aBtn.length;i++){
aBtn[i].index=i;
aBtn[i].onclick=function(){
for(var i=0;i<aBtn.length;i++){
aBtn[i].className='';
aDiv[i].className='';
}
aBtn[this.index].className='on';
aDiv[this.index].className='show';
}
}*/
for(var i=0;i<aBtn.length;i++){
(function(index){
aBtn[index].onclick=function(){
on(index)
}
})
(i)
}
}
tab('tab1');
tab('tab2',2)
数组去重的方法
1、双重循环
for(var i=0;i<ary.length;i++){
var cur=ary[i]
for(var j=i+1;j<ary.length;j++){
if(cur==ary[j]{
ary.splice(j,1);
j--;
}
}
}
2、先用sort,然后用当前项跟相邻项进行比较
ary.sort(function (a,b){
return a-b;
});
for(var i=0;i<ary.length;i++){
if(ary[i]===ary[i+1]){
ary.splice(i,1);
i--;
}
}
3、 新数组
var newAry=[];
for(var i=0;i<ary.length;i++){
if(newAry.indexOf(ary[i]==-1){
newAry.push(ary[i]);
}
}
4、 利用不重名的特性
var obj={};
//遍历数组中的每一项,如果对象中没有,把这一项赋值一份给对象,如果对像中已经有了,说明这是重复项,我们就删除数组中的这一项;
for(var i=0; i<ary.length; i++){
if(obj[ary[i]]){//走if说明重复了;
ary.splice(i,1);
i--;
}else{//走else说明对象中没有这个数;那么就给obj添加属性
obj[ary[i]]=ary[i];
}
}*/
5、 利用对象不重名的特性,实现了重复次数的记录,里面用到两个循环,一个for循环,for..in循环
var obj={};
for(var i=0; i<ary.length; i++){
if(obj[ary[i]]){
obj[ary[i]]++; //++ +=1
}else{//走else一定是对象没有;给这个属性名贴个1的标签
obj[ary[i]]=1;
}
}
//通过for..in拿到每个属性名;
var newAry=[];
for(var attr in obj){
newAry.push(Number(attr));
}
对象跟别人不同的特性
1、不重名的特性
2、如果对象的属性名是数字,那么打印出来的时候,按照数组的先后顺序进行显示
算法
快排
- 1:先拿到中间的索引,通过中间索引找到他对应的项
- 这个中间项,是从数组中拎出来,即数组中没有他了,所以,只能用splice;
- splice的返回值,是被删除的内容以新数组的形式返回,因为我们删除了一项,所以,要去数字必须用[0];
- 2:创建两个新数组left,right;
- 3:用ary数组跟中间项比较,比他小的放left数组,比他大的放right数组
- 4: return quciksort(left).concat([center],quciksort(right));
- 函数自己调用自己,属于"递归"
- 5:停止拆分的条件 if(ary.length<=1){return ary;}
- return 1)有阻断程序执行的功能 2)返回值;
Math常用的方法
- Math.ceil() 向上取整
- Math.floor() 向下取整
- Math.random() 取0~1之间的随机小数,不包含1;
- Math.round(Math.random()*(m-n)+n); 取n~m之间的随机整数,包含m
- Math.round() 四舍五入
- Math.pow(2,3) 幂次方
- Math.sqrt() 开平发
- Math.abs() 取绝对值
插排
1、先从ary种取出来一个数字,单独是个数组 splice
2、遍历ary的数组,跟left数组,从后往前的比较,如果比left的数字小,继续往前比,如果比某个值大,就插入到这个值的下一项的前面;(必须break,否则就会出错) ;如果比所有的都小,那就插入到left数组的第一个;
冒排-冒泡排序
1、两重循环,第一重循环代表的是轮数,第二重循环代表的次数,比较的次数在一次次的减少;
2、 每次比较的时候,都拿当前项跟后一项进行比较,如果比他大,交换位置;
var tmp=ary[j];
ary[j]=ary[j+1];
ary[j+1]=tmp;
跟函数相关的
- 阻断函数的执行 return;
跟循环相关的
- break 阻断循环的执行
- continue 本次不执行,以后继续;
网友评论