成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

細(xì)說JS數(shù)組

starsfun / 2878人閱讀

摘要:數(shù)組元素的讀寫使用訪問數(shù)組元素時(shí),將索引轉(zhuǎn)換為字符串,然后將其作為屬性名一樣使用。第一個(gè)參數(shù)應(yīng)該在前只展開一層數(shù)組元素不變,返回注意,只拼接第一層結(jié)構(gòu)。

此乃犀牛書(第七章 數(shù)組)讀書筆記,又結(jié)合了ES6中數(shù)組的擴(kuò)展部分做的知識(shí)梳理。
精華部分就是手工繪制的兩張數(shù)組總結(jié)圖了。
靈活運(yùn)用數(shù)組的各種方法是基本功,是基本功,是基本功,重要的事情說三遍。
好了,正文從下面開始~

數(shù)組的基本概念 什么是數(shù)組,數(shù)組元素,數(shù)組索引

對(duì)象是屬性的無序集合,而數(shù)組是值的有序集合;
每個(gè)值叫做一個(gè)元素,每個(gè)元素在數(shù)組中的位置稱為索引;

JS數(shù)組有什么特點(diǎn)

JS數(shù)組是無類型的:數(shù)組元素可以是任意類型,同一個(gè)數(shù)組中的元素也可能有不同類型;

JS數(shù)組是動(dòng)態(tài)的:可根據(jù)需要增長(zhǎng)或縮減;

JS數(shù)組可能是稀疏的:數(shù)組元素的索引不一定是連續(xù)的。

稀疏數(shù)組

稀疏數(shù)組length屬性值大于元素的個(gè)數(shù)

創(chuàng)建稀疏數(shù)組的兩種方法:

var a= []; a[1000] =1  //直接量
var a = [1,2,3,4,5,6]; delete a[0];  //刪除從而使得不連續(xù)
數(shù)組對(duì)象和普通對(duì)象的聯(lián)系和區(qū)別?

數(shù)組是特殊的對(duì)象,使用[]訪問數(shù)組元素就像使用[]訪問對(duì)象屬性一樣(索引就是屬性名)

數(shù)組的特別之處在于,當(dāng)使用小于2的32次方的非負(fù)整數(shù)作為屬性名時(shí)數(shù)組會(huì)自動(dòng)維持其length屬性值,length屬性使得數(shù)組區(qū)別于常規(guī)JS對(duì)象。

當(dāng)為數(shù)組元素賦值時(shí),索引i大于或等于length,length屬性變?yōu)閕+1;
當(dāng)設(shè)置數(shù)組length屬性小于當(dāng)前數(shù)組長(zhǎng)度時(shí),大于的部分將被刪除;
也可以設(shè)置數(shù)組的length屬性大于當(dāng)前數(shù)組長(zhǎng)度,這時(shí)后面會(huì)創(chuàng)建空區(qū)域;
可以使用Object.defineProperty()將數(shù)組length屬性設(shè)置為只讀的。

如何判斷一個(gè)對(duì)象是數(shù)組對(duì)象?

ES5提供了一個(gè)方法:

Array.isArray(a)    // true or false

還可以通過檢查對(duì)象的類屬性(class)

Object.prototype.toString.call(a) == "[object array]"
//這里需要使用Object的toString方法,因?yàn)锳rray的toString方法被重寫了。

注意:使用instanceof判斷數(shù)組對(duì)象是不靠譜的。這是因?yàn)楫?dāng)跨越多個(gè)窗體時(shí),檢測(cè)會(huì)失敗。

類數(shù)組對(duì)象

類數(shù)組對(duì)象:擁有l(wèi)ength屬性,屬性是非負(fù)整數(shù)的對(duì)象

數(shù)組方法在類數(shù)組對(duì)象上也能work, 類數(shù)組對(duì)象不能直接調(diào)用數(shù)組的方法,但可以間接調(diào)用

常見的類數(shù)組對(duì)象:arguments對(duì)象、一些DOM方法的返回

數(shù)組的操作(創(chuàng)建、讀寫、添加、刪除、遍歷)及方法

下面用一張圖來總結(jié)一下數(shù)組的方法:

這張圖是按照ES標(biāo)準(zhǔn)發(fā)展的順序總結(jié)了標(biāo)準(zhǔn)中數(shù)組提供的方法,畫完圖的我表示嚇了一跳。ES6竟然提供了這么多新的方法??磥硎褂玫氖窍喈?dāng)不充分。以后要考慮少用underscore了。。。

上圖中每個(gè)方法可能可以實(shí)現(xiàn)不止一種功能(例如splice既能實(shí)現(xiàn)為數(shù)組增加元素,又能刪除數(shù)組元素),那么按照數(shù)組操作劃分,這張圖又可以變成下面這個(gè)樣子:

下面對(duì)上述兩張圖里面的部分知識(shí)進(jìn)行詳細(xì)說明和demo演示。

創(chuàng)建數(shù)組的三種方法

數(shù)組直接量

var a = [1, true,"hi"];
var b = [,,]  //undefined*2

new + Array

var a = new Array()
var b = new Array(10)
var c = new Array(1,2)

Array.of()

Array.of(1,2,3)  //[1,2,3]

這是ES6中提供的方法,為了彌補(bǔ)new+Array在傳入不同個(gè)數(shù)的參數(shù)時(shí)輸出不一致的問題。

數(shù)組元素的讀寫:[]

使用"[]"訪問數(shù)組元素時(shí),js將索引轉(zhuǎn)換為字符串,然后將其作為屬性名一樣使用。

//注意使用負(fù)整數(shù)和浮點(diǎn)數(shù)作為索引時(shí):
a[-123]   //同a["-123"]
a[1.000]  //同a[1]
為數(shù)組添加元素有至少下面這么多辦法:
var a = [];
a[1] = 1; 
a.push(1)
a.unshift(1)  //以上都使得a變成了[1]
delete刪除數(shù)組元素不改變length

delete刪除數(shù)組元素是不改變數(shù)組的length的,也不會(huì)讓其他數(shù)組元素索引發(fā)生改變,會(huì)讓數(shù)組變?yōu)橄∈钄?shù)組。

遍歷數(shù)組元素有什么方法?

最簡(jiǎn)單的方案就是使用for循環(huán),那么,使用for循環(huán)遍歷數(shù)組時(shí)可以有哪些優(yōu)化點(diǎn)?

首先,如果數(shù)組不是稠密的,應(yīng)該加判斷排除null, undefined和不存在的元素,以避免多余循環(huán);

其次,數(shù)組長(zhǎng)度應(yīng)該先求出來,而非每次循環(huán)都去查詢長(zhǎng)度,但是這種適用于在遍歷過程中不修改數(shù)組長(zhǎng)度的情況(試一下一邊遍歷,一邊刪除數(shù)組元素的情況);

使用for循環(huán)和使用forEach,map這些方法有什么區(qū)別?

使用for循環(huán),可以從后向前遍歷數(shù)組,而使用方法則做不到。

sort方法不可不知

sort() 直接使用時(shí)是按照字母順序排列的。如果想要根據(jù)數(shù)值大小順序排列,可以在回調(diào)函數(shù)里指定。

var a= [33,4,1111,222]
a.sort()  //[1111,222,33,4]
a.sort((a,b)=>{
  return a-b  //<0  第一個(gè)參數(shù)應(yīng)該在前
}) //[4,33,222,1111]  
concat()只展開一層數(shù)組元素
var a = [1,2,3]
var b = a.concat(4,5) //a不變,返回[1,2,3,4,5]

注意,concat只拼接第一層結(jié)構(gòu)。
另外,使用擴(kuò)展運(yùn)算符同樣能實(shí)現(xiàn)數(shù)組拼接:

var a = [1,2,3]
var b = [...a,4,5]
厲害的splice()

splice既能刪除元素,也能插入元素,取決于有咩有第三個(gè)參數(shù)
splice是修改數(shù)組本身的,但是slice方法是不修改數(shù)組本身的。

var a = [1,2,3,4,5,6]
a.splice(4)   //a: [1,2,3,4]
a.splice(2,1) //[1,2,4]
a.splice(2,1,3)  //[1,2,3]
ES5數(shù)組的方法都有的一些特點(diǎn)

ES5數(shù)組方法的特點(diǎn):

第一個(gè)參數(shù)是函數(shù),對(duì)數(shù)組的每個(gè)元素調(diào)用一次該函數(shù)

如果是稀疏數(shù)組,對(duì)不存在的元素不調(diào)用傳遞的函數(shù)(wow)

不修改原始數(shù)組

forEach方法

forEach 不能break , 想break 需要try catch
forEach不修改原始數(shù)組,想修改,可以借助第三個(gè)參數(shù)

var data = [1,2,3,4,5,6]
data.forEach((ele, index, dd)=>{
  dd[index] = ele + 1
})
//data: [2,3,4,5,6,7]
map 通常都需要一個(gè)return:

map方法也不修改原始數(shù)組

var b = a.map(function(ele){return ele+1})
indexOf()與includes()方法的比較

indexOf方法有兩個(gè)缺點(diǎn):

不夠語義化,它的含義是找到參數(shù)值出現(xiàn)的第一個(gè)位置,所以要去比較是否不等于-1

內(nèi)部使用嚴(yán)格運(yùn)算符"===",所以會(huì)導(dǎo)致對(duì)NaN的誤判

[NaN].indexOf(NaN)   //-1

而includes方法沒有這個(gè)問題。

[NaN].includes(NaN)   //true

關(guān)于數(shù)組的方法眾多,在使用時(shí)多嘗試不同的方法,方能熟記各類方法的特點(diǎn)。

未完待續(xù)~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81346.html

相關(guān)文章

  • 淺談細(xì)說 JS 函數(shù)(call,apply,重載)

    摘要:什么是函數(shù)引用的原話函數(shù)是一組可以隨時(shí)隨地運(yùn)行的語句。函數(shù)是由這樣的方式進(jìn)行聲明的關(guān)鍵字函數(shù)名一組參數(shù),以及置于括號(hào)中的待執(zhí)行代碼。 什么是函數(shù)? 引用 W3School 的原話: 函數(shù)是一組可以隨時(shí)隨地運(yùn)行的語句。 函數(shù)是 ECMAScript 的核心。 函數(shù)是由這樣的方式進(jìn)行聲明的:關(guān)鍵字 function、函數(shù)名、一組參數(shù),以及置于括號(hào)中的待執(zhí)行代碼。 函數(shù)的基本語法是這樣的:...

    U2FsdGVkX1x 評(píng)論0 收藏0
  • 細(xì)說數(shù)組常用遍歷的方法

    摘要:需要返回值,如果不給,默認(rèn)返回使用場(chǎng)景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場(chǎng)景假定有一個(gè)對(duì)象數(shù)組將數(shù)中對(duì)象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測(cè)數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...

    阿羅 評(píng)論0 收藏0
  • 細(xì)說數(shù)組常用遍歷的方法

    摘要:需要返回值,如果不給,默認(rèn)返回使用場(chǎng)景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場(chǎng)景假定有一個(gè)對(duì)象數(shù)組將數(shù)中對(duì)象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測(cè)數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...

    AlphaWatch 評(píng)論0 收藏0
  • 細(xì)說數(shù)組常用遍歷的方法

    摘要:需要返回值,如果不給,默認(rèn)返回使用場(chǎng)景假定有一個(gè)數(shù)值數(shù)組將數(shù)組中的值以雙倍的形式放到數(shù)組寫法方法使用場(chǎng)景假定有一個(gè)對(duì)象數(shù)組將數(shù)中對(duì)象某個(gè)屬性的值存儲(chǔ)到數(shù)組中三從數(shù)組中找出所有符合指定條件的元素檢測(cè)數(shù)值元素,并返回符合條件所有元素的數(shù)組。 showImg(https://segmentfault.com/img/remote/1460000016810336?w=1149&h=524);...

    ?xiaoxiao, 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<