ES6 陣列介紹
ES6 主要是為了解決 ES5 的先天不足,比如 JavaScript 裡並沒有類的概念,但是目前瀏覽器的 JavaScript 是 ES5 版本,大多數高版本的瀏覽器也支援 ES6,不過只實現了 ES6 的部分特性和功能。 |
將引數中所有值作為元素形成陣列。
console.log(Array.of(1, 2, 3, 4)); // [1, 2, 3, 4] // 引數值可為不同型別 console.log(Array.of(1, '2', true)); // [1, '2', true] // 引數為空時返回空陣列 console.log(Array.of()); // []
將類陣列物件或可迭代物件轉化為陣列。
// 引數為陣列,返回與原陣列一樣的陣列 console.log(Array.from([1, 2])); // [1, 2] // 引數含空位 console.log(Array.from([1, , 3])); // [1, undefined, 3]
引數
Array.from(arrayLike[, mapFn[, thisArg]])
返回值為轉換後的陣列。
arrayLike
想要轉換的類陣列物件或可迭代物件。
console.log(Array.from([1, 2, 3])); // [1, 2, 3]
mapFn
可選,map 函式,用於對每個元素進行處理,放入陣列的是處理後的元素。
console.log(Array.from([1, 2, 3], (n) => n * 2)); // [2, 4, 6]
thisArg
可選,用於指定 map 函式執行時的 this 物件。
let map = { do: function(n) { return n * 2; } } let arrayLike = [1, 2, 3]; console.log(Array.from(arrayLike, function (n){ return this.do(n); }, map)); // [2, 4, 6]
一個類陣列物件必須含有 length 屬性,且元素屬性名必須是數值或者可轉換為數值的字元。
let arr = Array.from({ 0: '1', 1: '2', 2: 3, length: 3 }); console.log(); // ['1', '2', 3] // 沒有 length 屬性,則返回空陣列 let array = Array.from({ 0: '1', 1: '2', 2: 3, }); console.log(array); // [] // 元素屬性名不為數值且無法轉換為數值,返回長度為 length 元素值為 undefined 的陣列 let array1 = Array.from({ a: 1, b: 2, length: 2 }); console.log(array1); // [undefined, undefined]
轉換 map
let map = new Map(); map.set('key0', 'value0'); map.set('key1', 'value1'); console.log(Array.from(map)); // [['key0', 'value0'],['key1', // 'value1']]
轉換 set
let arr = [1, 2, 3]; let set = new Set(arr); console.log(Array.from(set)); // [1, 2, 3]
轉換字串
let str = 'abc'; console.log(Array.from(str)); // ["a", "b", "c"]
find()
查詢陣列中符合條件的元素,若有多個符合條件的元素,則返回第一個元素。
let arr = Array.of(1, 2, 3, 4); console.log(arr.find(item => item > 2)); // 3 // 陣列空位處理為 undefined console.log([, 1].find(n => true)); // undefined
findIndex()
查詢陣列中符合條件的元素索引,若有多個符合條件的元素,則返回第一個元素索引。
let arr = Array.of(1, 2, 1, 3); // 引數1:回撥函式 // 引數2(可選):指定回撥函式中的 this 值 console.log(arr.findIndex(item => item = 1)); // 0 // 陣列空位處理為 undefined console.log([, 1].findIndex(n => true)); //0
fill()
將一定範圍索引的陣列元素內容填充為單個指定的值。
let arr = Array.of(1, 2, 3, 4); // 引數1:用來填充的值 // 引數2:被填充的起始索引 // 引數3(可選):被填充的結束索引,預設為陣列末尾 console.log(arr.fill(0,1,2)); // [1, 0, 3, 4]
copyWithin()
將一定範圍索引的陣列元素修改為此陣列另一指定範圍索引的元素。
// 引數1:被修改的起始索引 // 引數2:被用來覆蓋的資料的起始索引 // 引數3(可選):被用來覆蓋的資料的結束索引,預設為陣列末尾 console.log([1, 2, 3, 4].copyWithin(0,2,4)); // [3, 4, 3, 4] // 引數1為負數表示倒數 console.log([1, 2, 3, 4].copyWithin(-2, 0)); // [1, 2, 1, 2] console.log([1, 2, ,4].copyWithin(0, 2, 4)); // [, 4, , 4]
entries()
遍歷鍵值對。
for(let [key, value] of ['a', 'b'].entries()){ console.log(key, value); } // 0 "a" // 1 "b" // 不使用 for... of 迴圈 let entries = ['a', 'b'].entries(); console.log(entries.next().value); // [0, "a"] console.log(entries.next().value); // [1, "b"] // 陣列含空位 console.log([...[,'a'].entries()]); // [[0, undefined], [1, "a"]]
keys()
遍歷鍵名。
for(let key of ['a', 'b'].keys()){ console.log(key); } // 0 // 1 // 陣列含空位 console.log([...[,'a'].keys()]); // [0, 1]
values()
遍歷鍵值。
for(let value of ['a', 'b'].values()){ console.log(value); } // "a" // "b" // 陣列含空位 console.log([...[,'a'].values()]); // [undefined, "a"]
includes()
陣列是否包含指定值。
注意:與 Set 和 Map 的 has 方法區分;Set 的 has 方法用於查詢值;Map 的 has 方法用於查詢鍵名。
// 引數1:包含的指定值 [1, 2, 3].includes(1); // true // 引數2:可選,搜尋的起始索引,預設為0 [1, 2, 3].includes(1, 2); // false // NaN 的包含判斷 [1, NaN, 3].includes(NaN); // true
flat()
console.log([1 ,[2, 3]].flat()); // [1, 2, 3] // 指定轉換的巢狀層數 console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]] // 不管巢狀多少層 console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5] // 自動跳過空位 console.log([1, [2, , 3]].flat());// [1, 2, 3]
flatMap()
先對陣列中每個元素進行了的處理,再對陣列執行 flat() 方法。
// 引數1:遍歷函式,該遍歷函式可接受3個引數:當前元素、當前元素索引、原陣列 // 引數2:指定遍歷函式中 this 的指向 console.log([1, 2, 3].flatMap(n => [n * 2])); // [2, 4, 6]
陣列緩衝區是記憶體中的一段地址。
定型陣列的基礎。
實際位元組數在建立時確定,之後只可修改其中的資料,不可修改大小。
透過建構函式建立:
let buffer = new ArrayBuffer(10); console.log(buffer.byteLength); // 10 分割已有陣列緩衝區 let buffer = new ArrayBuffer(10); let buffer1 = buffer.slice(1, 3); console.log(buffer1.byteLength); // 2
檢視是用來操作記憶體的介面。
檢視可以運算元組緩衝區或緩衝區位元組的子集,並按照其中一種數值資料型別來讀取和寫入資料。
DataView 型別是一種通用的陣列緩衝區檢視,其支援所有8種數值型資料型別。
建立:
// 預設 DataView 可運算元組緩衝區全部內容 let buffer = new ArrayBuffer(10); dataView = new DataView(buffer); dataView.setInt8(0,1); console.log(dataView.getInt8(0)); // 1 // 透過設定偏移量(引數2)與長度(引數3)指定 DataView 可操作的位元組範圍 let buffer1 = new ArrayBuffer(10); dataView1 = new DataView(buffer1, 0, 3); dataView1.setInt8(5,1); // RangeError
陣列緩衝區的特定型別的檢視。
可以強制使用特定的資料型別,而不是使用通用的 DataView 物件來運算元組緩衝區。
透過陣列緩衝區生成
let buffer = new ArrayBuffer(10), view = new Int8Array(buffer); console.log(view.byteLength); // 10
透過建構函式
let view = new Int32Array(10); console.log(view.byteLength); // 40 console.log(view.length); // 10 // 不傳參則預設長度為0 // 在這種情況下陣列緩衝區分配不到空間,建立的定型陣列不能用來儲存資料 let view1 = new Int32Array(); console.log(view1.byteLength); // 0 console.log(view1.length); // 0 // 可接受引數包括定型陣列、可迭代物件、陣列、類陣列物件 let arr = Array.from({ 0: '1', 1: '2', 2: 3, length: 3 }); let view2 = new Int16Array([1, 2]), view3 = new Int32Array(view2), view4 = new Int16Array(new Set([1, 2, 3])), view5 = new Int16Array([1, 2, 3]), view6 = new Int16Array(arr); console.log(view2 .buffer === view3.buffer); // false console.log(view4.byteLength); // 6 console.log(view5.byteLength); // 6 console.log(view6.byteLength); // 6
length 屬性不可寫,如果嘗試修改這個值,在非嚴格模式下會直接忽略該操作,在嚴格模式下會丟擲錯誤。
let view = new Int16Array([1, 2]); view.length = 3; console.log(view.length); // 2
定型陣列可使用 entries()、keys()、values()進行迭代。
let view = new Int16Array([1, 2]); for(let [k, v] of view.entries()){ console.log(k, v); } // 0 1 // 1 2
find() 等方法也可用於定型陣列,但是定型陣列中的方法會額外檢查數值型別是否安全,也會透過 Symbol.species 確認方法的返回值是定型陣列而非普通陣列。concat() 方法由於兩個定型陣列合並結果不確定,故不能用於定型陣列;另外,由於定型陣列的尺寸不可更改,可以改變陣列的尺寸的方法,例如 splice() ,不適用於定型陣列。
let view = new Int16Array([1, 2]); view.find((n) > 1); // 2
所有定型陣列都含有靜態 of() 方法和 from() 方法,執行效果分別與 Array.of() 方法和 Array.from() 方法相似,區別是定型陣列的方法返回定型陣列,而普通陣列的方法返回普通陣列。
let view = Int16Array.of(1, 2); console.log(view instanceof Int16Array); // true
定型陣列不是普通陣列,不繼承自 Array 。
let view = new Int16Array([1, 2]); console.log(Array.isArray(view)); // false
定型陣列中增加了 set() 與 subarray() 方法。 set() 方法用於將其他陣列複製到已有定型陣列, subarray() 用於提取已有定型陣列的一部分形成新的定型陣列。
// set 方法 // 引數1:一個定型陣列或普通陣列 // 引數2:可選,偏移量,開始插入資料的位置,預設為0 let view= new Int16Array(4); view.set([1, 2]); view.set([3, 4], 2); console.log(view); // [1, 2, 3, 4] // subarray 方法 // 引數1:可選,開始位置 // 引數2:可選,結束位置(不包含結束位置) let view= new Int16Array([1, 2, 3, 4]), subview1 = view.subarray(), subview2 = view.subarray(1), subview3 = view.subarray(1, 3); console.log(subview1); // [1, 2, 3, 4] console.log(subview2); // [2, 3, 4] console.log(subview3); // [2, 3]
let arr = [1, 2], arr1 = [...arr]; console.log(arr1); // [1, 2] // 陣列含空位 let arr2 = [1, , 3], arr3 = [...arr2]; console.log(arr3); [1, undefined, 3]
合併陣列
console.log([...[1, 2],...[3, 4]]); // [1, 2, 3, 4]
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2700372/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Shell 陣列介紹陣列
- AWK 陣列介紹陣列
- 全面介紹JavaScript陣列方法JavaScript陣列
- 介紹 Go 的陣列和切片Go陣列
- javascript陣列操作簡單介紹JavaScript陣列
- 動態陣列介紹----Delphi (轉)陣列
- ES6 - 陣列陣列
- 介紹PostgreSQL的陣列型別FUSQL陣列型別
- javascript關聯陣列簡單介紹JavaScript陣列
- Java 語法介紹(四):陣列(轉)Java陣列
- es6陣列方法陣列
- 簡單介紹Lua一維陣列與多維陣列的使用陣列
- 簡單介紹js 陣列 fill() 填充方法JS陣列
- Linux Awk 陣列操作詳細介紹Linux陣列
- ES6 Promise介紹Promise
- ES6 陣列相關陣列
- js--陣列的reduce()方法的使用介紹JS陣列
- js實現的陣列自定義排序介紹JS陣列排序
- NumPy 陣列切片及資料型別介紹陣列資料型別
- js宣告陣列的幾種方式簡單介紹JS陣列
- javascript陣列的map()函式用法簡單介紹JavaScript陣列函式
- javascript過濾陣列中的元素簡單介紹JavaScript陣列
- 陣列-在Shell指令碼中的基本使用介紹陣列指令碼
- 【深入淺出ES6】陣列陣列
- es6陣列去重複陣列
- ES6 Generator 函式介紹函式
- js類陣列物件(array-like objects)簡單介紹JS陣列物件Object
- javascript實現二維陣列實現簡單介紹JavaScript陣列
- es6 陣列擴充套件方法陣列套件
- javascript陣列去重(ES6版)JavaScript陣列
- [Javascript] Promise ES6 詳細介紹JavaScriptPromise
- 【ES6基礎】const介紹
- 簡單介紹最新python 字串陣列互轉問題Python字串陣列
- 智慧合約語言 Solidity 教程系列5 - 陣列介紹Solid陣列
- ES6之陣列的擴充套件陣列套件
- ES6後陣列可以快速去重陣列
- ES6陣列新增的幾個方法陣列
- shell 陣列使用簡介陣列