ES6之陣列的擴充套件

2021-09-13 10:01:59 字數 3501 閱讀 7504

es6在陣列方面增加了一些方法和原型屬性,有些還是蠻有用的。

擴充套件運算子:把陣列或者類陣列轉成用逗號隔開的引數:

把類陣列轉成陣列,有限制(類陣列就是有長度的變數):

var str = 'wade';

console.log([...str]);//["w", "a", "d", "e"]

把陣列轉成用逗號隔開的引數序列:

var arr = [1, 2, 3];

console.log(...arr); //1 2 3

console.log(1, 2, 3); //1 2 3

math.max(...[1, 2, 3])

push函式:

var arr = [1, 2, 3];

arr.push(5, 6, 7);

arr.push(...[5, 6, 7]);

大部分都是陣列的使用,合併陣列、複製陣列、與結構結合、函式傳參等等。

array.from:將類陣列轉換成陣列,無限制

console.log(array.from('wade')); //["w", "a", "d", "e"]

console.log(array.from( )); //["a", "b", "c"]

console.log(array.from([1, 2, 3])); //[1, 2, 3]

console.log(array.from()); //[undefined, undefined, undefined]

array.from還接受第二個函式引數,對每個元素進行處理返回:

console.log(array.from('5678', (x) => )) //[10, 12, 14, 16]
array.from第三個引數是this,用以this的指向。

array.of:將值轉成陣列

這個函式其實就是解決了array的行為差異:

console.log(array (3)) //[ , , ,}

console.log(array.of (3)) //[3]

copywithin方法:改變原陣列,接收三個引數,在當前陣列內部,將指定位置的成員複製到其他位置(陣列函式引數的下標都是包前不包後)

arr.copywithin(target, start, end)

target(必需):從該位置開始替換資料。如果為負值,表示倒數。

start(可選):從該位置開始讀取資料,預設為 0。如果為負值,表示倒數。

end(可選):到該位置前停止讀取資料,預設等於陣列長度。如果為負值,表示倒數。

var arr = [1, 2, 3, 4, 5];

arr.copywithin(0, 3)

console.log(arr);// [4, 5, 3, 4, 5]

find() 和 findindex():不改變原陣列,接收乙個函式引數和乙個this物件

find返回第乙個符合條件的元素,否則undefined,findindex返回第乙個元素的下標,否則-1

var arr = [1, 0, 9, -5, 12]

var resfind = arr.find((value, index, arr) => , this);

var resfindindex = arr.findindex((value, index, arr) => , this);

console.log(resfind); //12

console.log(resfindindex); //4

fill:填充陣列,改變原陣列,接收三個引數,第乙個是替換元素,第二個是起始位置,第三個是結束位置。

var arr = [1, 0, 9, -5, 12]

arr.fill('a', 1, 3);

console.log(arr); //[1, "a", "a", -5, 12]

entries(),keys() 和 values():返回遍歷器物件interator,配合for of迴圈,keys是對鍵名的遍歷、values是對鍵值的遍歷、entries是對鍵名和鍵值的遍歷

var arr = [1, 2, 3]

for(var val of arr.keys())//0 1 2

for(var val of arr.values())// 1 2 3

for(var val of arr.entries())//[0, 1] [1, 2] [2, 3]

includes():返回乙個布林值,表示是否包含某個元素,接收兩個個引數,第乙個是要查詢的元素,第二個是起始位置

var arr = [1, 2, 3, 4, 5]

console.log(arr.includes(4, 2)); //true

flat(),flatmap():返回新陣列,不改變原陣列。拉平陣列,就是把二維、三維陣列變成一維陣列

flat接收乙個引數,拉平幾維陣列,會跳過空位:

console.log([1, 2, [3, [4, 5]]].flat())// [1, 2, 3, [4, 5]]

console.log([1, 2, [3, [4, 5]]].flat(2));// [1, 2, 3, 4, 5]

flatmap跟map函式一樣,需要return

console.log([1, 2, 3].flatmap((val, index, arr) => ));// [2, 4, 6]

陣列空位:陣列的空位指,陣列的某乙個位置沒有任何值,比如[,]空位不是undefined,乙個位置的值等於undefined,依然是有值的。空位是沒有任何值。

es5 對空位的處理很不一致,大多數情況下會忽略空位。es6則不跳過空位,轉為undefined

console.log(array.from([1, , 2]));//[1, undefined, 2]
foreach(),filter(),reduce(),every()和some()都會跳過空位。

map()會跳過空位,但會保留這個值

join()和tostring()會將空位視為undefined,而undefined和null會被處理成空字串。

array.from()、擴充套件運算子…、entries()、keys()、values()、find()和findindex()會將空位處理成undefined。

for of也會迴圈遍歷空位,copywithin()會連空位一起拷貝,fill也會把空位視為正常位置

陣列的組合使用其實很好用,只是平時很少去考慮使用這些提供的方法,要是能把陣列的使用都記清楚,對平時開發有很大的便利。

coding 個人筆記

Es6陣列擴充套件

示例 es5和es6的擴充套件運算子區別 let arr 1,2,3 function add a,b,c es5 es6 add arr 6 複製陣列 let arr 1,2,3 es5 let arr3 arr.concat 4 es6 let arr3 arr,4 console.log ar...

ES6陣列擴充套件

陣列建構函式的靜態方法。靜態方法 把函式當物件處理 key對應的value是函式 我們就說這個方法是靜態方法 否則就是靜態屬性 array.f 1 console.log array.f 靜態屬性 array.fn function array.fn 靜態方法array.from方法用於將兩類物件轉...

ES6學習之陣列擴充套件

擴充套件運算子 將陣列分割為用逗號分割的引數序列 console.log 1,2,3 1 2 3 function test x,y,z var arg 1,2,3 null,arg 1 2 3 test arg 1 2 3 擴充套件運算子的應用 const a 1,2 複製陣列a const b ...