數組優化
新增Array.of() 、 Array.from()
Array.of()總會創建一個包含所有參數的數組,用來解決通過Array構造函數來創建數據的怪異行爲, new Array(n)傳一個參數的時候,如果參數類型爲number,則該數組的length替換爲n,如果是其他類型則會創建一個長度爲1的數組n,而Array.of(n),無論參數是何種類型,都只創建length爲1,值爲n的數組
let a = new Array(9) //[empty * 9]
let b = Array.of(9) //[9]
Array.from()能夠將類數組轉化爲數組,可以處理類數組對象和可迭代對象,可接收兩個參數,第一個是類數組,第二個是一個映射函數,還有第三個函數,表示映射函數this的值
function translate(){
let arr = Array.from(arguments, value => value + 1)
return arr;
}
translate(1,2,3,4) // [2, 3, 4, 5]
find()和findeIndex()
與ES5中添加的IndexOf()方法的區別在於,indexOf()查找的是特定的值,而find()查找的是符合某個條件的值,findIndex()查找的是符合條件的值的索引,接收兩個參數,第一個是回調函數,第二個是回調函數中this的值
let arr = [20, 80, 10, 23,78,79]
arr.find(value => value > 70) // 80
arr.findIndex(value => value > 70) //1
arr.findIndex(value => value > 80) //-1
fill()
fill(value, start, end) 用一個固定值替換數組中的元素,接收三個參數,第一個是用於填充的值,第二個參數是開始填充替換的位置,第三個參數是停止填充的位置,填充不包括此項,填充中止位不會大於數組長度
let arr = ['bag','big','beg','pig']
arr.fill('hello',2,3) // ["bag", "big", "hello", "pig"]
new Array(2).fill('hello',0,10) //["hello", "hello"]
copyWithin()
copyWithin(target,start,end) ,拷貝數組中指定位置的元素到另一指定位置處,接收三個參數,第一個參數是要被替換的目標索引,第二個參數是數組中被拷貝的起始索引,第三個參數是數組中被拷貝的中止索引,該方法不會改變原始數組的長度
let arr = ['aa','bb','cc','dd','ee']
//將前三個元素替換後第四個即之後的元素
arr.copyWithin(3,0,3) // ["aa", "bb", "cc", "aa", "bb"]