es6中新增的陣列的知識
JSON陣列格式轉換
JSON的陣列格式就是為了前端快速的把JSON轉換成陣列的一種格式,我們先來看一下JSON的陣列格式怎麼寫
let json = {
'0':'leiy',
'1':'leiyy',
'2':'leiyyy',
length:3
}
這就是一個標準的JSON陣列格式,跟普通的JSON對比是在最後多了一個length屬性。只要是這種特殊的json格式都可以輕鬆使用ES6的語法轉變成陣列。在ES6中絕大部分的Array操作都存在於Array物件裡。我們就用Array.from(xxx)來進行轉換。我們把上邊的JSON程式碼轉換成陣列,並列印在控制檯。
let arr=Array.from(json) console.log(arr);
列印結果:
[ 'leiy', 'leiyy', 'leiyyy' ]
實際開發中這種方法還是比較常用的,畢竟節省了我們程式碼行數,也讓我們的程式更清晰。
Array.of()方法:
它負責把一堆文字或者變數轉換成陣列。在開發中我們經常拿到了一個類似陣列的字串,需要使用eval來進行轉換,如果你一個老手程式設計師都知道eval的效率是很低的,它會拖慢我們的程式。這時候我們就可以使用Array.of方法。我們看下邊的程式碼把一堆數字轉換成陣列並列印在控制檯上:
let arr1=Array.of(3,6,7,8,9)
console.log(arr1);
列印結果:
[ 3, 6, 7, 8, 9 ]
當然它不僅可以轉換數字,字串也是可以轉換的
find( )例項方法:
所謂的例項方法就是並不是以Array物件開始的,而是必須有一個已經存在的陣列,然後使用的方法,這就是例項方法(不理解請看下邊的程式碼,再和上邊的程式碼進行比對,你會有所頓悟)。這裡的find方法是從陣列中查詢。在find方法中我們需要傳入一個匿名函式,函式需要傳入三個引數:
- value:表示當前查詢的值。
- index:表示當前查詢的陣列索引。
- arr:表示當前陣列。
在函式中如果找到符合條件的陣列元素就進行return,並停止查詢。你可以拷貝下邊的程式碼進行測試,就會知道find作用。
let arr3=[1,2,3,4,5,6,7,8,9] console.log(arr3.find(function(val,index,arr){ return val>5 }));
列印結果:
6
fill( )例項方法:
fill()也是一個例項方法,它的作用是把陣列進行填充,它接收三個引數,第一個引數是填充的變數,第二個是開始填充的位置,第三個是填充到的位置。
let arr=[1,2,3,4,5]
console.log(arr.fill('yy',1,5))
列印結果:
[ 1, 'yy', 'yy', 'yy', 'yy' ]
陣列的遍歷
for…of迴圈
這種形式比ES5的for迴圈要簡單而且高效。先來看一個最簡單的for…of迴圈。
let arr=['yy','uu','ii','jj','tt']
for(let i of arr){
console.log(i);
}
列印結果:
yy
uu
ii
jj
tt
for…of陣列索引:有時候開發中是需要陣列的索引的,那我們可以使用下面的程式碼輸出陣列索引。
let arr=['yy','uu','ii','jj','tt']
for(let index of arr.keys()){
console.log(index);
}
列印結果:
0
1
2
3
4
同時輸出陣列的內容和索引:我們用entries()這個例項方法,配合我們的for…of迴圈就可以同時輸出內容和索引了。
let arr=['yy','uu','ii','jj','tt']
for(let [index,val] of arr.entries()){
console.log(index+'-'+val);
}
列印結果:
0-yy
1-uu
2-ii
3-jj
4-tt
entries()例項方式生成的是Iterator形式的陣列,那這種形式的好處就是可以讓我們在需要時用next()手動跳轉到下一個值。我們來看下面的程式碼:
let arr=['yy','uu','ii','jj','tt']
let list = arr.entries()
console.log(list.next().value);
console.log('-------------');
console.log(list.next().value);
console.log('-------------');
console.log(list.next().value);
列印結果:
[ 0, 'yy' ]
-------------
[ 1, 'uu' ]
-------------
[ 2, 'ii' ]