關(guān)于ES6中數(shù)組新增的方法詳解
在ES6之前,創(chuàng)建數(shù)組的方式有2種:
一: 通過數(shù)組字面量
let array = [1,2,3]; console.log(array);//[1,2,3]
二: 通過new Array()創(chuàng)建數(shù)組
let array = new Array(1, 2, 3); console.log(array); //[1,2,3]
Array.find((item,indexArr,arr)=>{}) 掌握
找出第一個(gè)符合條件的數(shù)組成員。
它的參數(shù)是一個(gè)回調(diào)函數(shù),對所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)。
直到找出第一個(gè)返回值為true的成員,然后返回該成員。
如果沒有符合條件的成員,則返回undefined。
-- 找出第一個(gè)大于15的數(shù)字 let arr = [10, 20, 30] let firstItem = arr.find((item, index, Arr) => { return item > 15 }) console.log('firstItem==>', firstItem); //輸出20 -- 找出第一個(gè)大于19的數(shù)字的這一項(xiàng)的值 let arr = [{ age: 10 }, { age: 20 }, { age: 30 }] let firstItem = arr.find((item, index, Arr) => { return item.age > 19 }) console.log('firstItem==>', firstItem); //輸出{age: 20}
Array.findIndex((item, index, Arr) => {}) 掌握
數(shù)組實(shí)例的 findIndex 方法的用法與find方法非常類似,
返回第一個(gè)符合條件的數(shù)組成員的位置,如果所有成員都不符合條件,則返回-1。
let arr = [{ age: 10 }, { age: 20 }, { age: 30 }] let a = arr.findIndex((item, index, Arr) => { return item.age > 15 }) let b = arr.findIndex((item, index, Arr) => { return item.age > 45 }) console.log('a==>', a); //輸出1 console.log('b==>', b); //輸出-1 //查找數(shù)組的某一項(xiàng)是否有某個(gè)值 //返回第一個(gè)符合條件的數(shù)組成員的位置 const arr = [{ id: 001 }, { id: 002 }, { id: 003 }]; let index = arr.findIndex(item => { return item.id == '004' }) console.log(index);
Array.flat()用于拉平嵌套的數(shù)組[推薦-超級好用]
數(shù)組的成員有時(shí)還是數(shù)組,Array.flat()用于將嵌套的數(shù)組“拉平”,變成一維的數(shù)組。
該方法返回一個(gè)新數(shù)組,對原數(shù)據(jù)沒有影響。 [1, 2, [3, 4]].flat() 讀音【fu la t】 flat()默認(rèn)只會(huì)“拉平”一層,如果想要“拉平”多層的嵌套數(shù)組。 可以將flat()方法的參數(shù)寫成一個(gè)整數(shù),表示想要拉平的層數(shù),默認(rèn)為1。 [1, 2, [3, [4, 5]]].flat() 上面代碼中,表示想要拉平的層數(shù),默認(rèn)為1 // [1, 2, 3, [4, 5]] [1, 2, [3, [4, 5]]].flat(2) 上面代碼中,flat()的參數(shù)為2,表示要“拉平”兩層的嵌套數(shù)組。 // [1, 2, 3, 4, 5] 如果不管有多少層嵌套,都要轉(zhuǎn)成一維數(shù)組,可以用Infinity關(guān)鍵字作為參數(shù)。 [1, [2, [3]]].flat(Infinity) // [1, 2, 3] 如果原數(shù)組有空位,flat()方法會(huì)跳過空位。 [1, 2, , 4, 5].flat() // [1, 2, 4, 5]
Array.at()返回對應(yīng)下標(biāo)的值[超級好用]
我們都知道JavaScript不支持?jǐn)?shù)組索引值為負(fù)索引。
那么想要表示數(shù)組的最后一個(gè)成員,不能寫成arr[-1],只能使用arr[arr.length - 1]。
為了解決負(fù)索引這個(gè)問題,es6中為數(shù)組實(shí)例增加了at()方法,接受一個(gè)整數(shù)作為參數(shù)。
返回對應(yīng)位置的成員,支持負(fù)索引。
這個(gè)方法不僅可用于數(shù)組, 也可用于字符串和類型數(shù)組( TypedArray)。
如果參數(shù)位置超出了數(shù)組范圍,at()返回undefined。
const arr = [100, 120, 18, 130, 4]; console.log(arr.at(1)) //120 console.log(arr.at(-1)) //4 console.log(arr.at(-5)) //100 console.log(arr.at(-6)) //undefined
Array.from() [掌握]
一個(gè)類似數(shù)組的對象,Array.from將它轉(zhuǎn)為真正的數(shù)組。
需要注意的是:這個(gè)類似數(shù)組的對象必須要有l(wèi)ength屬性才可以,轉(zhuǎn)為數(shù)組。
否者將會(huì)轉(zhuǎn)為為一個(gè)空數(shù)組
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3 }; // ES5的寫法 var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES6的寫法 let arr2 = Array.from(arrayLike); // ['a', 'b', 'c'] 當(dāng)沒有類似數(shù)組的對象沒有l(wèi)ength屬性 let arrayLike = { '0': 'a', '1': 'b', '2': 'c', }; //此時(shí)返回的是一個(gè)空數(shù)組 let arr2 = Array.from(arrayLike); // []
Array.of() 了解
Array.of()方法用于將【一組數(shù)值】轉(zhuǎn)換為數(shù)組.
簡單的使用:
const a = Array.of(10, 20, 26, 38); console.log(a); // [10, 20, 26, 38] const b = Array.of(1).length; console.log(b); // 1 Array.of()可以用以下的代碼模擬實(shí)現(xiàn): function ArrayOf() { return [].slice.call(arguments); }
Array.includes的使用
Array.prototype.includes方法返回一個(gè)布爾值,表示某個(gè)數(shù)組是否包含給定的值。
與字符串的includes方法類似。ES2016 引入了該方法。
簡單的使用方法
const arr = [100, 200, 300]; console.log(arr.includes('100')) //false console.log(arr.includes(100)) //true
沒有該方法之前,我們使用數(shù)組的indexOf方法,檢查是否包含某個(gè)值。
if (arr.indexOf(el) !== -1) { // 有這個(gè)值 } indexOf方法有兩個(gè)缺點(diǎn),一是不夠語義化,它的含義是找到參數(shù)值的第一個(gè)出現(xiàn)位置, 所以要去比較是否不等于-1,表達(dá)起來不夠直觀。 二是,它內(nèi)部使用嚴(yán)格相等運(yùn)算符(===)進(jìn)行判斷,這會(huì)導(dǎo)致對NaN的誤判。 [NaN].indexOf(NaN) // -1 includes使用的是不一樣的判斷算法,所以沒有這個(gè)問題。 [NaN].includes(NaN) // true
擴(kuò)展運(yùn)算符 (...)
擴(kuò)展運(yùn)算符是三個(gè)點(diǎn)(...),
將一個(gè)數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。
console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [<div>, <div>, <div>]
let arr1=[11,22,]; let arr2=["aa","bb"]; // es5的合并 let arr=arr1.concat(arr2); console.log(arr) // [11, 22, "aa", "bb"] //es6 let newarr=[...arr1,...arr2] console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
// 函數(shù)內(nèi)部有一個(gè)對象,arguments可以獲取到實(shí)參,但是一個(gè)偽數(shù)組 //Array[餓 rei] function sun(){ console.log(arguments) //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ?, Symbol(Symbol.iterator): ?] 他是一個(gè)偽數(shù)組 } sun(1,2,3,4,5,6,7,9); // 如何將函數(shù)內(nèi)部的偽數(shù)組變?yōu)檎鎸?shí)的數(shù)組 方法1 function sun(){ let ags=Array.prototype.slice.call(arguments); ags.push(150); console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150] } sun(1,2,3,4,5,6,7,9); // 如何將函數(shù)內(nèi)部的偽數(shù)組變?yōu)檎鎸?shí)的數(shù)組 方法2 function sun(){ let ags=[...arguments];//將偽數(shù)組百年未真實(shí)的數(shù)組 ags.push(150); console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150] } sun(1,2,3,4,5,6,7,9); // 總結(jié)擴(kuò)展運(yùn)算符是... [...變?yōu)檎鎸?shí)數(shù)組的對象]
數(shù)組的空位
數(shù)組的空位指的是,數(shù)組的某一個(gè)位置沒有任何值.
比如Array()構(gòu)造函數(shù)返回的數(shù)組都是空位。
let arr = new Array(3) console.log(arr); // [, , ,] 谷歌瀏覽器中會(huì)有出現(xiàn) [空屬性 × 3]
上面代碼中,Array(3)返回一個(gè)具有 3 個(gè)空位的數(shù)組。
forEach(), filter(), reduce(), every() 和some()都會(huì)跳過空位。 map()會(huì)跳過空位,但會(huì)保留這個(gè)值 join()和toString()會(huì)將空位視為undefined,而undefined和null會(huì)被處理成空字符串。 ps:ES6 則是明確將空位轉(zhuǎn)為undefined。 let arr = new Array(3) console.log(arr[0] === undefined); //true
ES5 對空位的處理,已經(jīng)很不一致了,大多數(shù)情況下會(huì)忽略空位。
ps:ES6 則是明確將空位轉(zhuǎn)為undefined。 Array.from()方法會(huì)將數(shù)組的空位,轉(zhuǎn)為undefined,也就是說,這個(gè)方法不會(huì)忽略空位。 Array.from(['a',,'b']) // [ "a", undefined, "b" ] 擴(kuò)展運(yùn)算符(...)也會(huì)將空位轉(zhuǎn)為undefined。 [...['a',,'b']] // [ "a", undefined, "b" ] new Array(3).fill('a') // ["a","a","a"] for...of循環(huán)也會(huì)遍歷空位。 let arr = [, ,]; for (let i of arr) { console.log(1); } // 1 // 1 上面代碼中,數(shù)組arr有兩個(gè)空位,for...of并沒有忽略它們。 如果改成map()方法遍歷,空位是會(huì)跳過的
總結(jié)
到此這篇關(guān)于ES6中數(shù)組新增方法的文章就介紹到這了,更多相關(guān)ES6數(shù)組新增方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)自己的DOM選擇器原理及代碼
實(shí)現(xiàn)自己的DOM選擇器時(shí)匹配行為也應(yīng)該和瀏覽原生匹配行為一致,接下來本文將詳細(xì)介紹下實(shí)現(xiàn)思路及方法,感興趣的你可以參考下或許對你鞏固知識有所幫助2013-03-03Javascript中八種遍歷方法的執(zhí)行速度深度對比
關(guān)于數(shù)組或?qū)ο蟊闅v,相信很多人都沒有深入觀察過執(zhí)行效率。這是一個(gè)曾在群里吵翻天的話題,讀懂后你將成為遍歷效率話題的大師。下面這篇文章主要介紹了Javascript中八種遍歷方法執(zhí)行速度深度對比的相關(guān)資料,需要的朋友可以參考下。2017-04-04offsetHeight在OnLoad中獲取為0的現(xiàn)象
需要獲取div的高度時(shí),往往需要用到offsetHeight,有時(shí)會(huì)碰到offsetHeight獲取到為0的現(xiàn)象,感興趣的朋友可以參考下面的代碼片段2013-07-07在JavaScript中實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了在JavaScript中實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12url傳遞的參數(shù)值中包含&時(shí),url自動(dòng)截?cái)鄦栴}的解決方法
下面小編就為大家?guī)硪黄猽rl傳遞的參數(shù)值中包含&時(shí),url自動(dòng)截?cái)鄦栴}的解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08如何使用proxy實(shí)現(xiàn)一個(gè)簡單完整的MVVM庫的示例代碼
這篇文章主要介紹了如何使用proxy實(shí)現(xiàn)一個(gè)簡單完整的MVVM庫的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09微信小程序基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件
這篇文章主要介紹了微信小程序-基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11JavaScript和HTML DOM的區(qū)別與聯(lián)系及Javascript和DOM的關(guān)系
這篇文章主要介紹了JavaScript和HTML DOM的區(qū)別與聯(lián)系及Javascript和DOM的關(guān)系的相關(guān)資料,需要的朋友可以參考下2015-11-11