从事前端已经两年多的时间了,从前没有一直没有养成一个归纳总结做笔记的习惯,以至于有些知识长时间没有用到之后就开始有些模糊不清。所以在面对一些问题的时候,总是拿捏不准,常常需要借助度娘。于是自己开始从新将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
判断数组是否包含某一项值,该方法可以使用来对数组进行去重