js中数组常用方法

从事前端已经两年多的时间了,从前没有一直没有养成一个归纳总结做笔记的习惯,以至于有些知识长时间没有用到之后就开始有些模糊不清。所以在面对一些问题的时候,总是拿捏不准,常常需要借助度娘。于是自己开始从新将js基础知识走一遍,并进行总结。
之前发过一篇关于字符串常用处理方法的文章,字符串和数据是我们在工作中时常在打交道的,所以了解并熟练掌握它们的一些常用处理方法是必要的。现在我们就来看看数组都有哪些常用的处理方法。

isArray

判断一个对象是否为数组,是 返回true,不是 返回false。

map

返回一个新数组,数组中的元素是原始数组的元素调用函数之后处理的值。

pop

删除数组最后一个元素,返回值为数组最后一个元素

var arr = [2,3,5,4,1,7,6,9,8];
console.log(arr.pop()) //  8
console.log(arr) // [2,3,5,4,1,7,6,9]

push

向数组的最后添加一个或者多个元素

var arr = [2,3,5,4,1,7,6,9];
console.log(arr.push(8)) // [2,3,5,4,1,7,6,9,8]
console.log(arr.push(1,5))[2,3,5,4,1,7,6,9,8,1,5]

shift

与pop相反,删除数组第一个元素,返回值为数组第一个元素,

var arr = [2,3,5,4,1,7,6,9,8];
console.log(arr.shift()) //  2
console.log(arr)   // [3,5,4,1,7,6,9,8]

unshift

向数组的前面添加一个或者多个元素,与push用法相同

var arr = [2,3,5,4,1,7,6,9,8];
console.log(arr.unshift(8)) // [8,2,3,5,4,1,7,6,9,8]
console.log(arr.unshift(1,5))[1,5,8,2,3,5,4,1,7,6,9,8]

reverse

将数组反序输出

var arr = [1,2,3,4];
console.log(arr.reverse())  // [4,3,2,1]

toString

将数组转化为字符串

var arr = ['h','e','l','l','o'];
console.log(arr.toString()) //  "h,e,l,l,o"

join

将数组根据传入的参数转化为字符串

var arr = ['h','e','l','l','o'];
console.log(arr.join()) //  "h,e,l,l,o"   join 方法中没有传入任何参数
console.log(arr.join('')) //  "hello"   join 方法中传入一个空字符串
console.log(arr.join('-')) //  "h-e-l-l-o"   join 方法中传入一个 '-' 字符串

splice

从数组中截取出一个新数组,返回值是一个数组,该方法会改变原数组

var arr=[2,3,4,5,6,7,8];
console.log( arr.splice(3) ) //  [5,6,7,8]    当只传入一个数字时,该数字代表索引值,默认从索引值为3的元素开始一直截取到最后
console.log( arr.splice(3,2) ) // [5,6]    第一个参数是索引值,第二个参数代表要截取的长度  
console.log( arr.splice(3,7) ) // [5,6]    当截取长度大于了原数组从当前索引开始到最后的元素的长度时,则截取到最后一个元素

slice

从数组汇总截取一个新数组,返回截取到的数组,该方法不会改变原数组

var arr=[2,3,4,5,6,7,8];
console.log( arr.splice(3) ) //  [5,6,7,8]    当只传入一个数字时,该数字代表索引值,默认从索引值为3的元素开始一直截取到最后
console.log( arr.splice(3,2) ) // [5,6]    第一个参数是索引值,第二个参数代表结束位置
console.log( arr.splice(3,7) ) // [5,6]    当结束位置大于了原数组长度时,则截取到最后一个元素

concat

连接两个数组

var arr1 = [1,2];
var arr2 = [3,4];
var arr = arr1.concat(arr2);
console.log( arr )  // [1,2,3,4]

filter

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

var arr = [2,4,1,5,7,4,8];
var newArr = arr.filter(function(currentValue,index,arr){ return currentValue>3})
console.log(newArr) // [ 4, 5, 7, 4, 8 ]  返回的新数组元素均为大于3的元素

注意: filter不会对空数组进行检测,且该方法不会改变原数组

sort

该方法是对数组进行排序
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

var arr = [ 24,1, 2, 4, 4, 5, 7, 8 ,13];
arr.sort();    //   ???  会输出什么呢?

可能你会觉得这不是排序吗,默认从小到大,输出 [1,2,4,4,5,7,8,13,24]。 真的是这样吗?当你真正尝试后会发现,实际输出的是 [ 1, 12, 2, 24, 4, 4, 5, 7, 8 ]。
这是为什么呢? 上面说了它的默认是按照字符编码的顺序进行排序,因此,它会默认把上面的所有元素当成一个字符串,而字符串比较的时候,12与2,它会拿字符串的第一个字符去对比,1<2,因此就把12排在了2的前面。
那么想要我们想要的按数字的从小到大排序该怎么办呢?
该方法有一个函数参数,我们应该从此下手

console.log( arr.sort(function(a,b){return a-b})  )   //  [ 1, 2, 4, 4, 5, 7, 8, 12, 24 ]

该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

reduce

我们先来看看这个方法的用法

arr.reduce(function(prev,cur,index,arr){
	......
},init);

其中,
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。

看上去似乎比其它方法麻烦了很多,其实也不用太在意那么多,我们常用到的参数一般就是prev、cur,其它的知道这个用法就行
因此我们可以用这个方法做很多事情,比如去重,求一个数组所有元素的和,差,积,商等等

var arr = [1,2,3,4];
var count = arr.reduce(function(a,b){
	return a+b;
});
console.log(count)  //10

数组去重

var arr = [1,2,2,3,4,3,5], result=[];
arr.sort().reduce((prev,curv)=>{
	if(prev!==curv){
		result.push(prev);
	}
	return curv;
});
result.push(arr[arr.length -1])
console.log(result);  // [1, 2, 3, 4, 5]

forEach

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

every

方法用于检测数组所有元素是否都符合指定条件
every() 方法使用指定函数检测数组中的所有元素:

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true。

some

检测数组中是否含有指定的元素,有的话就返回true,没有就返回false。

flat

ES6新增方法,将嵌套数组拉平,改变成一维数组,多层嵌套需要传数值

var arr = [1,2,[3],4,5];
var newArr = arr.flat();
console.log(newArr); // [1,2,3,4,5]
var arr = [1,[2,[3,[4]],5];
var newArr = arr.flat(3);
console.log(newArr); // [1,2,3,4,5]

Array.form

Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。
类数组对象需要具备以下两点:

a. 必须具有length属性,用于指定数组的长度。
b. 该类数组对象的属性名必须为数值型或字符串型的数字

该方法可以与Set结合使用;
Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.of

创建数组直接赋值,以前使用new Array()的方式创建并赋值会出现一个问题
在这里插入图片描述
如图,当使用new Array()创建数组,默认只有一个值且为数字时,它将默认该数值为长度,使用Array.of即可避免这种问题。

find

可以遍历该数组,返回回调函数里与指定条件匹配的一项,注意:匹配到第一个符合条件的项后便不再继续执行。
在这里插入图片描述
在这里插入图片描述

findIndex

用法与find相同,只是该方法返回的是该元素的索引值。

includes

判断数组是否包含某一项值,该方法可以使用来对数组进行去重

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值