javascript数组
一、数组快速清空---->arr.length=0;/arr=[];第二种效率高
二、数组的length属性可读可写,而字符串的length属性是可写的
三、IE6,IE7不支持unshift的返回值,unshift为从数组前面添加元素
四、arr.unshift(arr.pop())让数组循环换位置,右循环
五、arr.push(arr.shift())左移循环(应用:元素位置交换)
六、splice()方法:
1、删除:arr.splice(0,1):开始位置及删除个数
2、替换:arr.splice(0,1,"djfs"):开始位置,需要替换的个数,替换的元素
3、添加:arr.splice(1,0,"dsfj"):添加位置,添加元素
七、数组去重:
1,遍历for循环
1 //1,数组去重 2 var arr=[1,2,2,4,2,2]; 3 //循环比较方法 4 for(var i=0;i<arr.length;i++){ 5 for(var j=i+1;j<arr.length;j++){ 6 if(arr[i]===arr[j]){ 7 arr.splice(j,1); 8 j--;//去掉元素之后数组长度会减小 9 } 10 } 11 } 12 alert(arr);
缺点:当数据比较大时运算较为复杂。
2,首先将数组进行排序,建立一个空数组存储不相同的数据,由于排序完成后相同数据会相邻,因此只需遍历原数组查看该数据和新建数组的最后一个元素是否相同,如果不相同即插入到新数组中
Array.prototype.unique=function(){ this.sort(); var res=[this[0]]; for(var i=1;i<this.length;i++){ if(this[i]!==res[res.length-1]){ res.push(this[i]); } } return res; } alert(arr.unique());
优点:运行效率会高于第一种方法,但是当需要不改变原顺序时此方法失效。
3,创建一个空数组存储不相同的数据,同时创建一个空对象来标记这些数据,标记方法为将数组内容作为对象的一个属性
并赋值为1,遍历数组,当对象属性不存在时插入到空数中,同时将其添加为对象属性
Array.prototype.unique= function () { var res=[];//空数组 var json={};//空对象 for(var i=0;i<arr.length;i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]]=1; } } return res; } alert(arr.unique());
运行效率高,但json对象的键值只能存储为字符串,因此对于1和‘1’并不能很好的判断
解决方法:通过判断键的对象类型来加一个后缀
Array.prototype.unique1= function () { var res=[];//空数组 var json={};//空对象 var prefix=''; for(var i=0;i<arr.length;i++){ if(typeof arr[i]=='string'){ prefix='_str'; }else{ prefix=''; } if(!json[this[i]+prefix]){ res.push(this[i]); json[this[i]+prefix]=true; } } return res; } alert(arr.unique1());
4、判断新数组中是否有原数组数据的位置
Array.prototype.unique2=function(){ var ret = [] for (var i = 0; i < arr.length; i++) { var item = arr[i] if (ret.indexOf(item)===-1) { ret.push(item) } } return ret; } alert(arr.unique2());
但IE6,7不支持indexOf方法,需要重新自定义
八、sort()函数
sort函数的本质是通过判断函数function(a,b){}的返回值(-1,0,1)来进行元素位置的交换
1,实现数组元素位置随机变换:即令function的返回值不定
arr.sort( function(a,b){ return Math.random()-0.5; }