数组方法汇总
1,javascript提供的原型方法有:join(),push(),pop(),shift(),unshift(),concat(),slice(),splice(),sort(),reverse()
1)join(separator):将数组以分隔符连接起来,返回连接后的字符串,默认以','分隔.
var arr = [1,2,3]; arr.join(); //1,2,3 arr.join('-') //1-2-3
2)push()&pop()
push():接收任意数量参数,并添加至数组末尾,返回数组长度.
pop():移除数组最后一项,并返回移除的项.
var arr= [1,2,3]; arr.pop() //3(数组最后一项) arr.push('a') //4(数组长度)
3)shift()&unshift()
shift():移除数组第一项,并返回移除的项
unshift():将参数添加至数组开头,并返回数组长度
var arr= [1,2,3]; arr.shift(); //1(数组第一项) arr.unshift(0) //4(数组长度)
4)concat() 将参数添加至原数组中,并返回新构建的数组
[1,2,3].concat(9,11) //[1,2,3,9,11]
5)sort()&reverse()
sort():将数组升序排列
reverse();反转数组项的顺序
[2,1,3].sort() //[1,2,3] [13,24,51,3].sort() //[13,24,3,51] 排序不对
显然第二种方法有问题,这是因为sort默认会将其转化为字符串做比较,为了解决上述问题,sort()方法还可接收一个比较函数作为参数,比较函数接收两个参数,如果第一个参数位于第二个参数之前返回负数,相等返回0,之后返回正数.
function compare(value1,value2){ //升序排列 if(value1<value2) return -1; else if(value1 > value2) return 1; else return 0; } [13,24,51,3].sort(compare) //[3,13,24,51]
降序排列
function compare(value1,value2){//降序排列 if(value1 < value2) return 1; else if(value1 > value2) return -1; else return 0 } [13,24,51,3].sort(compare) //[51,24,13,3]
6)slice()&splice()
slice():如果是一个参数,,返回从指定位置开始到结尾的数组,如果是2个参数,返回起始下标到结束下标之间的数组,但不包括结束位置的项
[1,3,5,7,8].slice(1,4) //[3,5,7]
splice():有很多种方法,可以实现删除,插入,替换
删除:指定2个参数,删除的第一项位置以及项数.
插入:指定3个参数,删除的第一项,0(要删除的项数),要插入的项
替换:指定3个参数:删除的第一项,要删除的项数,要插入的项
var arr = [1,3,5,,7,9,11] arr.splice(0,2) //[5,7,9,11] (删除) arr.splice(2,0,4,6) ;//[5,7,4,6,9,11] 插入 arr.splice(1,1,2,4) ;//[5,2,4,4,6,9,11] 替换
2,es5新增的方法:indexOf(),lastIndexOf(),forEach(),map(),filter(),every(),some(),reduce(),reduceRight()
1)indexOf()&lastIndexOf()
indexOf():接收2个参数,查找的项和起始位置,从头开始查找
lastIndexof():接收2个参数,查找到项和起始位置,从末尾开始查找
var arr = [1,3,5,7,7,5,3,1]; arr.indexOf(5) //2 arr.lastIndexOf(5) //2 arr.indexOf('5') //-1类型不一样,因为indexOf采用的严格运算符===判断的
2)forEach() 数组遍历循环,接收一个回调函数,数组每一项运行回调,函数默认3个参数,分别是数组元素,数组下标,以及数组本身
var arr = [1, 2, 3, 4, 5]; arr.forEach(function(x, index, a){ console.log(x + '|' + index + '|' + (a === arr)); }); // 输出为: // 1|0|true // 2|1|true // 3|2|true // 4|3|true // 5|4|true
3)map(),映射,接收一个函数,对数组的每一项运行该函数.
[1,2,3].map(function(item){return item*item}) //[1,4,9]
4)filter(),接收一个函数,过滤符合条件的数组元素或者对象,并返回满足条件的数组.
//可用于对象的过滤 var data = [{num:1},{num:2},{num:3},{num:4},{num:5}]; var data1 = data.filter(function(item){ return item.num <= 3; }); console.log(data1) //用于数组的过滤 var data = [1,2,3,4,5]; var data1 = data.filter(function(value){ return value <= 3; }); console.log(data1)
5)every()&some()
every():判断数组每一项是否符合条件,都符合返回true.
some():判断是否存在满足条件的项,若有返回true.
[1,2,3].every(function(item){return x>2}) //false [1,2,3].some(function(item){return x>2}) //true
6)reduce()&reduceRight()
reduce():从数组的第一项开始,逐个遍历到最后.
reduceRight():从数组最后一项开始,向前遍历到第一项.
这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。
//appOrderList 为数组对象 var appOrderList=[{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2},{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2}] var hash = {}; appOrderList = appOrderList.reduce(function (item, next) { //去重,item为空数组,next当前项 hash[next.goodsOrderID] ? '' : hash[next.goodsOrderID] = true && item.push(next); return item; }, []); //
[{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2}]
当然,还可以用forEach实现
var appOrderList=[{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2},{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2}] var hash={},item=[]; appOrderList.forEach(function(next){ hash[next.goodsOrderID] ? '' : hash[next.goodsOrderID] = true && item.push(next); }) item //[{goodsOrderID:0},{goodsOrderID:1},{goodsOrderID:2}]
以上则是javascript提供的全部数组方法.