摘要:它主要用在以類數(shù)組對象和可迭代對象為藍(lán)本,創(chuàng)建對應(yīng)的數(shù)組。類數(shù)組對象我們最熟悉的類數(shù)組對象,應(yīng)該就是的對象了。
在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]
在大多數(shù)情況下new Array()運(yùn)行良好:
let array = new Array(1, 2); console.log(array.length); //2 console.log(array[0]); //1 console.log(array[1]); //2 array = new Array("a"); console.log(array.length); //1 console.log(array[0]);//"a" array = new Array(1, "a"); console.log(array.length); // 2 console.log(array[0]);//1 console.log(array[1]);//"a"
但是new Array()有一種詭異的情況:
let array = new Array(2); console.log(array[0]); // undefined console.log(array[1]);// undefined console.log(array.length); // 2
當(dāng)我們給new Array()傳遞單個(gè)數(shù)字參數(shù)時(shí),這個(gè)數(shù)字不是作為數(shù)組元素,而是該數(shù)組的length屬性而存在,而數(shù)組本身則是一個(gè)空數(shù)組。
為了解決上面這個(gè)令人類沒有安全感的特性,ES6引入了Array.of()來解決這個(gè)問題:
三:Array.of()
顧名思義,of()方法就是以它接受到的參數(shù)作為元素來創(chuàng)造數(shù)組,上面我們說的單個(gè)數(shù)字參數(shù)的情況也同樣適用:
let array = Array.of(3); console.log(array.length); // 1 console.log(array[0]); // 3 array = Array.of(1, 2); console.log(array.length);// 2 console.log(array[0]); // 1 console.log(array[1]);// 2 array = Array.of("a"); console.log(array.length);// 1 console.log(array[0]);// "a" array = Array.of(1, "a"); console.log(array.length); // 2 console.log(array[0]);// 1 console.log(array[1]);// "a"
四:Array.from()
ES6還增加了一個(gè)Array.from(),也是用了創(chuàng)建一個(gè)數(shù)組。它主要用在以類數(shù)組對象和可迭代對象為藍(lán)本,創(chuàng)建對應(yīng)的數(shù)組。
1: Array.from(類數(shù)組對象)
我們最熟悉的類數(shù)組對象,應(yīng)該就是function的arguments對象了。接下來,我們看一個(gè)用Array.from()創(chuàng)建包含arguments元素的數(shù)組:
function createArrayFrom() { console.log(arguments instanceof Array); // false return Array.from(arguments); } let array = createArrayFrom(1, 2, 3); console.log(array instanceof Array); // true console.log(array.length); //3 console.log(array[0]);//1 console.log(array[1]);//2 console.log(array[2]);//3 console.log(array.indexOf(2)); //1
2: Array.from(可迭代對象)
Array.from()也可以把一個(gè)可迭代對象轉(zhuǎn)換為數(shù)組: let iteratorObject = { *[Symbol.iterator](){ yield 1; yield 2; yield 3; } }; let array = Array.from(iteratorObject); console.log(array instanceof Array); // true console.log(array.length); // 3 console.log(array[0]); // 1
五:Array.from()的第二個(gè)參數(shù)
前面的例子,我們看到了一個(gè)類數(shù)組對象和可迭代對象作為Array.from()的第一個(gè)參數(shù),從而創(chuàng)建出包含它們元素的數(shù)組。Array.from()的第二個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)用來將類數(shù)組對象和可迭代對象的元素進(jìn)行某種變換后,再作為生出數(shù)組的元素,例如:
let iteratorObject = { *[Symbol.iterator](){ yield 1; yield 2; yield 3; } }; let array = Array.from(iteratorObject, (item)=>{return item + 1}); console.log(array[0]); //2 console.log(array[1]); //3 console.log(array[2]); //4
這個(gè)例子里,我們提供了把每個(gè)元素值加一的變換,所以原本的1,2,3,置換到新的數(shù)組之后,元素是2,3,4。
六: Array.from()的第三個(gè)參數(shù)
Array.from()還提供第三個(gè)參數(shù)可用,第三個(gè)參數(shù)用來指定在第二個(gè)參數(shù)所代表的回調(diào)函數(shù)的this的值,看一個(gè)例子:
let firstHelper = { diff: 1, add(value){ return value + this.diff; } }; let secondHelper = { diff: 2 }; function createArrayFrom() { return Array.from(arguments, firstHelper.add, secondHelper); } let array = createArrayFrom(1, 2, 3); console.log(array); //[3, 4, 5]
上面的例子里面,我們在回調(diào)方法add()里面使用了this(這行代碼:value + this.diff)。add()定義在firstHelper對象,且firstHelper對象也有diff屬性;但是我們通過給三個(gè)參數(shù)傳入secondHelper,從而使得在firstHelper.add()方法里的this值是secondHelper。
以上就是ES6新增的Array.of()和Array.from()方法,可以使得開發(fā)者用更少的代碼應(yīng)對更多變的創(chuàng)建數(shù)組的場景。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106241.html
摘要:例如,會(huì)刪除數(shù)組中的前兩項(xiàng)。插入的項(xiàng)數(shù)不必與刪除的項(xiàng)數(shù)相等。對數(shù)組進(jìn)行遍歷循環(huán),對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)。判斷數(shù)組中是否存在滿足條件的項(xiàng),只要有一項(xiàng)滿足條件,就會(huì)返回。 深入理解ECMA2015(四) —— 數(shù)組的擴(kuò)展 一、JavaScript數(shù)組詳解回顧(ES6之前) (1)數(shù)組的創(chuàng)建 使用 Array 構(gòu)造函數(shù): var arr1 = new Array(); //創(chuàng)建一個(gè)...
網(wǎng)上很少有提供不同版本接口對比的文章,所以自己總結(jié)一下。 Array Method Description Modify Version concat 連接多個(gè)數(shù)組,返回?cái)?shù)組副本,參數(shù)可以為值或數(shù)組 否 ES3 join 把數(shù)組元素組合為字符串 否 ES3 pop 刪除并返回最后一個(gè)元素 是 ES3 push 向數(shù)組末尾添加一個(gè)或多個(gè)值,返回?cái)?shù)組長度 是 ES3 reve...
摘要:更重要的是,代碼意圖也直觀數(shù)組長度,每一項(xiàng)按照約定的規(guī)則進(jìn)行初始化。上面代碼創(chuàng)建了一個(gè)長度為的數(shù)組其中的項(xiàng)為數(shù)字。的強(qiáng)大不止于此,它還能接受一個(gè)映射函數(shù)上面代碼中,被直接傳遞給方法,從而將它包含的值轉(zhuǎn)換成了數(shù)組。 es6新增了二種方法:Array.of()和Array.from(),它們有什么用途呢?在平時(shí)的開發(fā)中能給我們帶來什么方便呢?本篇將從一個(gè)創(chuàng)建數(shù)組的小問題開始,逐步揭開它們的...
摘要:創(chuàng)建數(shù)組中創(chuàng)建數(shù)組的方式數(shù)組字面量一個(gè)數(shù)組。傳入一個(gè)回調(diào)函數(shù),找到數(shù)組中符合當(dāng)前搜索規(guī)則的第一個(gè)元素,返回它,并且終止搜索。用新元素替換掉數(shù)組內(nèi)的元素,可以指定替換下標(biāo)范圍。 ES5提供的數(shù)組已經(jīng)很強(qiáng)大,但是ES6中繼續(xù)改進(jìn)了一些,主要是增加了新的數(shù)組方法,所以這章的知識(shí)非常少。 創(chuàng)建數(shù)組 ES5中創(chuàng)建數(shù)組的方式:數(shù)組字面量、new一個(gè)數(shù)組。 const arr1 = [] //數(shù)組字...
閱讀 777·2021-11-23 09:51
閱讀 841·2021-11-23 09:51
閱讀 2511·2021-11-15 18:01
閱讀 3870·2021-10-11 11:07
閱讀 2406·2021-09-22 15:30
閱讀 1080·2021-09-22 14:59
閱讀 1562·2019-08-30 15:55
閱讀 1759·2019-08-30 15:52