ES6给数组添加了不少方法,我先把之前的方法总结一下:
1.Array.isArray():检测数组
var arr = ['a','b','c'] var str = 'abc' console.log(Array.isArray(arr))//true console.log(Array.isArray(str))//false
2.push():接收任意数量的参数,把它们逐个添加到数组末尾
var arr = ['a','b','c'] var item = arr.push('d','e') console.log(item)//5 console.log(arr)//["a", "b", "c", "d", "e"]
3.pop():从数组末尾移除最后一项
var arr = ['a','b','c'] var item = arr.pop() console.log(item)//c console.log(arr)//["a", "b"]
4.shift():移除数组第一项并返回该项
var arr = ['a','b','c'] var item = arr.shift() console.log(item)//a console.log(arr)//["b", "c"]
5.unshift():能在数组前端添加任意个项并返回新数组长度
var arr = ['a','b','c'] var item = arr.unshift('d','e') console.log(item)//5 console.log(arr)//["d", "e", "a", "b", "c"]
6.reverse():反转数据项的顺序,注意它已经把原数组改变了
var arr = [2,4,6,3,1] console.log(arr.reverse())//[1, 3, 6, 4, 2] console.log(arr)//[1, 3, 6, 4, 2]
7.sort():可以接收一个比较函数作为参数,比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,两参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数
var arr = [2,4,6,3,1] arr.sort(function(a,b) { return a - b }) console.log(arr)//[1, 2, 3, 4, 6]
8.concat():基于当前数组中的所有项创建一个新的数组,感觉字符串的操作方法类似
var arr1 = ['a','b','c'] var arr2 = ['d','e','f'] var arr = arr1.concat(arr2) console.log(arr)//["a", "b", "c", "d", "e", "f"] console.log(arr1)//["a", "b", "c"]
9.slice():截取原数组,构建一个新的数组,原数组保持不变
var arr = ['a','b','c','d','e'] var arr1 = arr.slice(2) var arr2 = arr.slice(2,3) console.log(arr1)//["c", "d", "e"] console.log(arr2)//["c"]
10.splice():这恐怕是最强大的数组方法,增,删,改,操作全能
(1)增,可以向指定位置插入任意数量的项,只需提供三个参数,起始位置,0(要删除的项数)和要插入的项
var arr = ['a','b','c'] arr.splice(1,0,'d','e') console.log(arr)//["a", "d", "e", "b", "c"]
(2)删,提供两个参数,要删除的第一项的位置和要删除的项数
var arr = ['a','b','c','d'] arr.splice(1,2) console.log(arr)//["a", "d"]
(3)改,结合上面两种方式,先删再增就是改
var arr = ['a','b','c','d','e'] arr.splice(1,2,'f','g') console.log(arr)//["a", "f", "g", "d", "e"]
11.indexOf(),lastIndexOf() 它们都接收两个参数,要查找的项和查找起点位置的索引(可选的),indexOf()从开始向后查找,lastIndexOf从末尾向前查找
var arr = ['a','b','c','d','c','e'] console.log(arr.indexOf('c', 3))//4 console.log(arr.lastIndexOf('c', 3))//2
12.every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
var num = [1,2,3,4,5,6] var everyResult = num.every(function(item, index, array){ return (item > 0) }) console.log(everyResult)//true
13.filter():对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组
var num = [1,2,3,4,5,6] var filterResult = num.filter(function(item, index, array){ return (item > 3) }) console.log(filterResult)//[4, 5, 6]
14.forEach():对数组中的每一项运行给定的函数,这个方法没有返回值
var num = [1,2,3,4,5,6] num.forEach(function(item, index, array){ console.log(item)//1,2,3,4,5,6 })
15.map():对数组中每一项运行给定的函数,返回每次函数调用的结果组成的数组
var num = [1,2,3,4,5,6] var mapResult = num.map(function(item, index, array){ return item * 2 }) console.log(mapResult)//[2, 4, 6, 8, 10, 12]
16.some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true
var num = [1,2,3,4,5,6] var someResult = num.some(function(item, index, array){ return item > 5 }) console.log(someResult)//true
17.reduce(),reduceRight():迭代数组的所有项,然后构建一个最终返回的值,reduce()从第一项开始,reduceRight()从最后一项开始
var num = [1,2,3,4,5,6] var reduceResult = num.reduce(function(prev, cur, index, array){ return prev + cur }) console.log(reduceResult)//21