ES5提供的数组已经很强大,可是ES6中继续改进了一些,主要是增长了新的数组方法,因此这章的知识很是少。segmentfault
ES5中建立数组的方式:数组字面量、new一个数组。数组
const arr1 = [] //数组字面量 const arr2 = new Array() //new构建
ES6建立数组:Array.of()、Array.from()函数
ES5中new一我的数组的时候,会存在一个使人困惑的状况。当new一个数字的时候,生成的是一个长度为该数字的数组,当new一个字符串的时候,生成的是该字符串为元素的数组。测试
const a = new Array(2) const b = new Array("2") console.log(a, b) //[undefined, undefined] ["2"]
这样一来,致使new Array的行为是不可预测的,Array.of()出现为的就是解决这个状况。this
const c = Array.of(2) const d = Array.of("2") console.log(c, d) // [2] ["2"]
使用Array.of()建立的数组传入的参数都是做为数组的元素,而不在是数组长度,这样就避免了使用上的歧义。code
若是说Array.of()是建立一个新数组,而Array.from()是将类数组转换成数组。对象
下面的例子讲的是将arguments转换成数组。arguments是类数组对象,他表示的是当前函数的全部参数,若是函数没有参数,那么arguments就为空。教程
function test(a, b) { let arr = Array.from(arguments) console.log(arr) } test(1, 2) //[1, 2]
映射转换:Array.from(arg1, arg2),咱们能够给该方法提供2个参数,第二个参数做为第一个参数的转换。看个简单例子你就懂了。字符串
function test(a, b) { let arr = Array.from(arguments, value => value + 2) console.log(arr) } test(1, 2) //[3, 4]
Array.from还能够设置第三个参数,指定this。get
Array.from()转换可迭代对象:这个用法只须要一个例子,数组去重。
function test() { return Array.from(new Set(...arguments)) } const s = test([1, "2", 3, 3, "2"]) console.log(s) // [1,"2",3]
ES6给数组添加了几个新方法:find()、findIndex()、fill()、copyWithin()。
一、find():传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,而且终止搜索。
const arr = [1, "2", 3, 3, "2"] console.log(arr.find(n => typeof n === "number")) // 1
二、findIndex():传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,终止搜索。
const arr = [1, "2", 3, 3, "2"] console.log(arr.findIndex(n => typeof n === "number")) // 0
三、fill():用新元素替换掉数组内的元素,能够指定替换下标范围。
arr.fill(value, start, end)
测试一下
const arr = [1, 2, 3] console.log(arr.fill(4)) // [4, 4, 4] 不指定开始和结束,所有替换 const arr1 = [1, 2, 3] console.log(arr1.fill(4, 1)) // [1, 4, 4] 指定开始位置,从开始位置所有替换 const arr2 = [1, 2, 3] console.log(arr2.fill(4, 0, 2)) // [4, 4, 3] 指定开始和结束位置,替换当前范围的元素
四、copyWithin():选择数组的某个下标,从该位置开始复制数组元素,默认从0开始复制。也能够指定要复制的元素范围。
arr.copyWithin(target, start, end)
测试一下
const arr = [1, 2, 3, 4, 5] console.log(arr.copyWithin(3)) // [1,2,3,1,2] 从下标为3的元素开始,复制数组,因此4, 5被替换成1, 2 const arr1 = [1, 2, 3, 4, 5] console.log(arr1.copyWithin(3, 1)) // [1,2,3,2,3] 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,因此4, 5被替换成2, 3 const arr2 = [1, 2, 3, 4, 5] console.log(arr2.copyWithin(3, 1, 2)) // [1,2,3,2,5] 从下标为3的元素开始,复制数组,指定复制的第一个元素下标为1,结束位置为2,因此4被替换成2
其余还有定型数组、数组缓冲区的概念,你能够详细查看书上教程。
掌握新的建立数组的方式,以及数组新增的几个方法,就够你使用了。定型数组和数组缓冲区通常人能够不用了解的太详细。