數(shù)組的增強-《understanding-ECMAScipt6》讀書筆記10

前言

前兩天看了別人寫的博客,對某些知識點挖掘的深度和對知識點描述語言的通俗令我贊嘆。
我寫的這一系列讀書筆記的初衷是想寫給自己備忘的。
最初的目的,是想要翻到這個文章,就能夠自己看的懂描述。
畢竟有些東西,不常用,細節(jié)不一定記得那么清楚。

新的方法

Array.of()

舊的構造數(shù)組方式new Array()的行為詭異,如果只傳入一個參數(shù),并且這個參數(shù)是數(shù)字,那么會構造出來一個長度為這個數(shù)字的數(shù)組。

Array.of()統(tǒng)一了行為,加入的項只會是數(shù)組的內(nèi)容。

Array.from()

在ES5中,如果需要將類數(shù)組轉(zhuǎn)變?yōu)閿?shù)組,需要下面的代碼:

let arr = Array.prototype.slice.call(arrayLike);

ES6中,我們可以使用Array.from():

/*
* Array.from(arrayLike[, mapFn[, thisArg]])
* 一參為類數(shù)組
* 二參為類似map的函數(shù)
* 三參為函數(shù)的this指向
*/
let arr = Array.from(arrayLike)

Array.prototype.find(callback[,thisArg])

callback有三個參數(shù),item,index,thisArray
thisArg為callback的this指向

返回值為通過callback測試的值的集合,若無,則為undefined

Array.prototype.findIndex(callback[,thisArg])

和find方法的區(qū)別就是,返回值是通過callback測試的索引值的集合

Array.prototype.fill(特定的值[,起點][,終點(可為負)])

好像沒有什么好描述的
對了,這個主要用在類型數(shù)組(typed array)

Array.prototype.copyWithin(target[, start][, end])

數(shù)組內(nèi)部的自復制,感覺有點難理解,還是上一段代碼吧。

['alpha', 'bravo', 'charlie', 'delta'].copyWithin(2, 0);

// results in ["alpha", "bravo", "alpha", "bravo"]

target,目標的起始位置
start,復制的起始位置,默認為0
end,復制的終點位置,默認為數(shù)組最后一項的位置
這個主要用在類型數(shù)組(typed array)

Typed Array

Typed Array 主要是為了WebGL 和OPEN GL ES2.0設計的

數(shù)字類型

  • int8
  • uint8
  • int16
  • uint16
  • int32
  • uint32
  • float32
  • float64

Array Buffers

創(chuàng)建buffer

let buffer = new ArrayBuffer(10) //調(diào)用c的malloc()方法,創(chuàng)建一個10字節(jié)的buffer
let buffer2 = buffer.slice(4,6)//生成新buffer,渠道上一buffer的4和5位

用視圖操作buffer數(shù)組

//DataView(buffer[,byteOffset][,byteLength])
let buffer = new ArrayBuffer(10),
    views = new DataView(buffer,5,2);

view.byteOffset //5
view.byteLength //2

讀寫數(shù)據(jù)

下面是操作8字節(jié)的方法, 操作16字節(jié)和32字節(jié)整型的方法只需要將下列方法中的8替換為16或者32.

  • getInt8(byteOffset, littleEndian)
  • setInt8(byteOffset, value, littleEndian)
  • getUint8(byteOffset, littleEndian)
  • setUint8(byteOffset, value, littleEndian)

下面是操作浮點數(shù)的方法

  • getFloat32(byteOffset, littleEndian)
  • setFloat32(byteOffset, value, littleEndian)
  • getFloat64(byteOffset, littleEndian)
  • setFloat64(byteOffset, value, littleEndian)

我擦,感覺好麻煩。不過,也有簡化一點的法子

創(chuàng)建特定類型的視圖

//Int8Array(buffer[,byteOffset][,byteLength])
let buffer = new ArrayBuffer(10),
    views = new Int8Array(buffer,5,2);

view.byteOffset //5
view.byteLength //2

可以將以下對象作為參數(shù)傳入構造函數(shù)

  • A typed array
  • An iterable
  • An array
  • An array-like object

各種類型構造函數(shù)

  • Int8Array(buffer[,byteOffset][,byteLength])
  • Int16Array(buffer[,byteOffset][,byteLength])
  • Int32Array(buffer[,byteOffset][,byteLength])
  • Float32Array(buffer[,byteOffset][,byteLength])

這些方法的屬性

  • byteOffset
  • byteLength
  • length
  • buffer

類型數(shù)組和正常數(shù)組相同點

可以通過索引值直接取值

值得注意的是,類型數(shù)組無法改變長度

共同的方法

  • copyWithin()
  • findIndex()
  • lastIndexOf()
  • slice()
  • forEach()
  • map()
  • some()
  • fill()
  • indexOf()
  • reduce()
  • sort()
  • filter()
  • join()
  • reduceRight()
  • entries()
  • values()
  • keys()
  • reverse()

雖然方法是一樣的,但是還是有些細微的差別

  • 會檢測返回的數(shù)組的數(shù)字類型是不是合理
  • 根據(jù)[Symbol.species]確定返回的是類型數(shù)組還是常規(guī)數(shù)組

iterator接口

都具備iterator接口。
類型數(shù)組通過...接口時,會轉(zhuǎn)換成常規(guī)數(shù)組

of()from()方法

類型數(shù)組返回的都是類型數(shù)組

類型數(shù)組和正常數(shù)組不同點

  • 類型數(shù)組的長度不可改變
  • 類型數(shù)組中的項,如非正常數(shù)字,則替換為0
  • 有些正常數(shù)組的方法,類型數(shù)組是沒有的。因為類型數(shù)組不能改變數(shù)組長度,所以concat(),shift(),pop(),unshift(),push()的方法是沒有的。

類型數(shù)組新增的方法

TypedArray.prototype.set(typedarray/array [,offset])

第一個參數(shù)可以使類型數(shù)組或者常規(guī)數(shù)組
二參為寫入類型數(shù)組的起始位置,默認為0

TypedArray.prototype.subarray([begin [,end]])

第一個參數(shù)為拷貝數(shù)組的起始位置,默認為0
二參為拷貝數(shù)組的終止位置,默認為數(shù)組的長度

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內(nèi)容