在ECMAScript中数组是非常常用的引用类型了。ECMAScript所定义的数组和其他语言中的数组有着很大的区别。那么首先要说的就是数组也是一种对象。
特点:
一般来说我们定义数组的方法很简单,直接使用 []
即可,当然也可以使用 new Array()
这样的构造函数的形式,不过并不常用。对于数组本身本没有太多可以说的东西,还是直接来过一遍它的方法
push
:向数组尾部添加元素(可多个)
vararr =[]; varresult = arr.push(1,true); // arr =[1,true] // result=2;push方法返回值为新数组的长度
pop
:从数组尾部移除一个元素
vararr =[1,true]; varresult = arr.pop(); // arr=[1] // result = true;pop方法返回值为被移除的元素
shift
:从数组头部删除一个元素
vararr = [1,2,true,newDate()]; varresult = arr.shift();// // arr =[2, true, Fri May 20 2016 00:50:33 GMT+0800 (中国标准时间)] // result = 1;shift方法返回值为被移除的元素
unshift
:向数组头部添加元素(可多个)
vararr = []; varresult = arr.unshift(1,2,false); // arr = [1, 2, false] // result = 3 ; unshift方法返回新数组的长度
splice
:数组截取/插入的方法(操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.splice(1,2,3,4,5); // arr = [1, 3, 4, 5, 4, 5];splice方法操作直接操作数组本身 // result = [2,3];splice方法返回被截取的元素
slice
:数组截取(不操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.slice(2,4); // arr = [1,2,3,4,5];不操作数组本身 // result = [3,4];slice方法返回被截取的元素
concat
:链接两个数组的方法(不操作数组本身)
vararr1 = [1,2,3]; vararr2 = [true,5]; varresult = arr1.concat(arr2); // arr1 = [1, 2, 3]; // arr2 = [true, 5]; // result = [1, 2, 3, true, 5];concat方法返回链接后的新数组
join
:在每个元素之间加入内容(不操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.join("-"); // arr = [1, 2, 3, 4, 5]; // result = "1-2-3-4-5"; join方法返回每个元素加入内容后的字符串
sort
:排序(直接操作数组本身)
vararr = [1,345,23,22,10,9]; varresult1 = arr.sort(); // arr = [1, 10, 22, 23, 345, 9] // result1 = [1, 10, 22, 23, 345, 9]sort方法返回排序后的数组 varresult2 = arr.sort(function(a,b){ returna-b; }); // result2 = [1, 9, 10, 22, 23, 345];正确的从小到大排列
reverse
:数组反转(直接操作数组本身)
vararr = [12,324,543,10,9]; varresult = arr.reverse(); // arr = [9, 10, 543, 324, 12]; // result = [9, 10, 543, 324, 12]; //返回反转后的数组
indexOf
:正序查找元素的索引(0开始)
vararr = [1,2,3,4,5,4,3,2,1]; varresult1 = arr.indexOf(4) varresult2 = arr.indexOf(4,4) // arr = [1,2,3,4,5,4,3,2,1]; // result1 = 3;返回值为查找到的元素索引 // result2 = 5 // 没有返回-1
lastIndexOf
:倒序版本:倒序查找元素的索引(最后一个元素开始)
vararr = [1,2,3,4,5,4,3,2,1]; varresult1 = arr.lastIndexOf(4) varresult2 = arr.lastIndexOf(4,4) // arr = [1,2,3,4,5,4,3,2,1]; // result1 = 5;返回值为查找到的元素索引 // result2 = 3 // 没有返回-1
forEach
:循环数组的每一个元素,并且对每一项执行一个方法。没有返回值(不操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.forEach(function(item,index,arr){ returnitem+1; }) // arr = [1, 2, 3, 4, 5]; // result = undefined;forEach方法没有返回值
map
:循环数组的每一个元素,并且对每一项执行一个方法,执行完毕后,新的数组返回(不操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.map(function(item,index,arr){ returnitem+1; }) // arr = [1, 2, 3, 4, 5]; // result = [2, 3, 4, 5, 6];map方法返回运行函数后的新数组
filter
:对于数组的每一个元素,进行一个函数的运行,给定条件去执行,返回过滤后的结果(不操作数组本身)
vararr = [1,2,3,4,5]; varresult = arr.filter(function(item,index,arr){ returnitem>2; }) // arr = [1,2,3,4,5]; // result = [3,4,5];返回满足条件的值
every
:对于数组的每一个元素都执行一个函数,如果都返回 true
,最后则返回 true
;如果有一个返回 false
,最后结果返回 false
.(不操作数组本身)
vararr = [1,2,3,4,5]; varresult1 = arr.every(functionfun(item,index,arr){ returnitem >2; }); varresult2 = arr.every(functionfun(item,index,arr){ returnitem >0; }); // arr = [1,2,3,4,5]; // result1 = false;不全部满足条件 // result2 = true;全部满足条件
some
:对于数组的每一个元素都执行一个函数,如果有一项返回 true
,最后则返回 true
;如果每一项返回 false
,最后结果才返回 false
.(不操作数组本身)(与上一个 every
相反)
vararr = [1,2,3,4,5]; varresult1 = arr.some(functionfun(item,index,arr){ returnitem>=5; }); varresult2 = arr.some(functionfun(item,index,arr){ returnitem<0; }); // arr = [1,2,3,4,5]; // result1 = true;不全部满足条件 // result2 = false;每一项都返回false
reduce
:最终构建一个返回值,接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
vararr = [1,2,3,4,5]; /** * perv:前一个值 * cur:当前值 * index:当前索引位置 * arr:原数组 **/ varresult = arr.reduce(function(perv,cur,index,arr){ returnperv +cur; }); // arr = [1,2,3,4,5]; // result = 15;
reduceRight
:倒序版本:最终构建一个返回值,
遍历的起始位置不同
vararr = [1,2,3,4,5]; /** * perv:前一个值 * cur:当前值 * index:当前索引位置 * arr:原数组 **/ varresult = arr.reduceRight(function(perv,cur,index,arr){ returnperv +cur; }); // arr = [1,2,3,4,5]; // result = 15;