数组方法汇总

时间:2020-12-02 19:02:57

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提供的全部数组方法.