许多东西四处搜索所得,有慕课网的学习笔记,有blog的大神原创,也有其他地方的引入,再以后会一一整理,为了加深自己的知识。
(PS:没有粘贴的作者看到后可以留言让我加链接)
一,使用数组
1.1定义数组
1 //定义一个空数组 2 var testArr=new Array(); 3 //定义一个有n个空元素的数组 4 var testArr=new Array(n); 5 testArr[n+2]=11; 6 //testArr.lenght就会增加3 7 //直接初始化 8 var 数组名 = [<元素1>, <元素2>, <元素3>...]; 9 //数组名[下标] = 值;下标只能是从0开始的整数。
1.2使用数组
1 var catArray=[1,2,43,65]; 2 catArray //[1, 2, 43, 65] 3 catArray[1] //2 4 catArray.length //4 5 6 for(x in catArray){ 7 console.log(catArray[x]); 8 } 9 //1 2 43 65
1.3 检测类型
1 typeof catArray //"object" 2 Array.isArray(catArray) 3 4 Array.isArray(catArray) // true 通常用来检测数组
二,常用技巧
2.1数组合并
1 var a=[1,2,3],b=[4,5,6]; 2 Array.prototype.concat(a,b); 3 //[1, 2, 3, 4, 5, 6]
2.2数组去重
1 var arr=[2,3,7,54,4,399,6,7,4]; 2 var newArr=arr.sort(pop); 3 var saveArray=[newArr[0]]; 4 5 for(var i=1;i<newArr.length;i++){ 6 if(newArr[i]!==newArr[i-1]){ 7 saveArray.push(newArr[i]); 8 } 9 } 10 11 function pop(a,b){ 12 return a-b; 13 }
2.3字符串反序
1 var tesss="i love you"; 2 tesss.split("").reverse().join(""); 3 //"uoy evol i"
2.4 slice常用
1 //call方法arguments可以使用数组的slice方法,参数是1的意思 2 //因为arguments并不是真正的数组对象,只是与数组类似而已,所以它并没有slice这个方法, 3 //Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法。 4 //要是直接写arguments.slice(1)会报错 5 function test(a, b, c, d) { 6 var arg = Array.prototype.slice.call(arguments, 1); 7 console.log(arg); 8 } 9 test("a", "b", "c", "d");// ["b", "c", "d"]
slice内部构造大概,引入 肥杜(http://www.cnblogs.com/littledu/archive/2012/05/19/2508672.html) 发表的代码,记录下
1 Array.prototype.slice = function(start,end){ 2 var result = new Array(); 3 start = start || 0; 4 end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键 5 for(var i = start; i < end; i++){ 6 result.push(this[i]); 7 } 8 return result; 9 }
转数组通用方法
1 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ 5 var arr = []; 6 for(var i = 0,len = s.length; i < len; i++){ 7 //arr.push(s[i]); 8 arr[i] = s[i]; //据说这样比push快 9 } 10 return arr; 11 } 12 }