Fork me on GitHub

学习笔记-javascript 数组

 许多东西四处搜索所得,有慕课网的学习笔记,有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 }

 

posted on 2017-03-16 14:50  品茗见南山  阅读(227)  评论(0编辑  收藏  举报