認識array數(shù)組

數(shù)組的定義

除了在定義時賦值,數(shù)組也可以先定義后賦值。
任何類型的數(shù)據(jù)黔夭,都可以放入數(shù)組。

數(shù)組的本質(zhì)

本質(zhì)上羽嫡,數(shù)組屬于一種特殊的對象纠修。typeof運算符會返回數(shù)組的類型是object。
JavaScript語言規(guī)定厂僧,對象的鍵名一律為字符串,所以了牛,數(shù)組的鍵名其實也是字符串颜屠。之所以可以用數(shù)值讀取,是因為非字符串的鍵名會被轉(zhuǎn)為字符串鹰祸。
對象有兩種讀取成員的方法:“點”結(jié)構(gòu)(object.key)和方括號結(jié)構(gòu)(object[key])甫窟。

length屬性

數(shù)組的length屬性,返回數(shù)組的成員數(shù)量蛙婴。
1)只要是數(shù)組粗井,就一定有l(wèi)ength屬性。該屬性是一個動態(tài)的值街图,等于鍵名中的最大整數(shù)加上1浇衬。
2)length屬性是可寫的。如果人為設(shè)置一個小于當前成員個數(shù)的值餐济,該數(shù)組的成員會自動減少到length設(shè)置的值耘擂。所以 將數(shù)組清空的一個有效方法,就是將length屬性設(shè)為0絮姆。
3)值得注意的是醉冤,由于數(shù)組本質(zhì)上是對象的一種,所以我們可以為數(shù)組添加屬性篙悯,但是這不影響length屬性的值蚁阳。

let a = []
a.b = 'a'

a
  b: "a"
  length: 0  // length不變
  __proto__: Array(0)

for…in 循環(huán)和數(shù)組的遍歷

for...in循環(huán)不僅可以遍歷對象,也可以遍歷數(shù)組鸽照,畢竟數(shù)組只是一種特殊對象螺捐。
不推薦使用for...in遍歷數(shù)組,因為會遍歷非數(shù)字鍵。

var a = [1, 2, 3];

for (var i in a) {
  console.log(a[i]);
}
// 1
// 2
// 3

但是归粉,for...in不僅會遍歷數(shù)組所有的數(shù)字鍵椿疗,還會遍歷非數(shù)字鍵。

var a = [1, 2, 3];
a.foo = true;

for (var key in a) {
  console.log(key);
}
// 0
// 1
// 2
// foo

數(shù)組的空位

1)數(shù)組的空位是可以讀取的糠悼,返回undefined届榄。
2)使用delete命令刪除一個數(shù)組成員,會形成空位倔喂,并且不會影響length屬性铝条。

let a = [1, , 1];
a.length // 3

let a = [, , ,];
a[1] // undefined

let a = [1, 2, 3];
delete a[1];
a[1] // undefined
a.length // 3

Array對象

Array作為構(gòu)造函數(shù),行為很不一致席噩。因此班缰,不建議使用它生成新數(shù)組,直接使用數(shù)組字面量是更好的做法悼枢。

1.構(gòu)造函數(shù)

Array是JavaScript的內(nèi)置對象埠忘,同時也是一個構(gòu)造函數(shù),可以用它生成新的數(shù)組馒索。

let arr = new Array(2);
arr.length // 2
arr // [ undefined ,  undefined ]

2.Array.isArray()

Array.isArray方法用來判斷一個值是否為數(shù)組莹妒。

var a = [1, 2, 3];

Array.isArray(a) // true

3.Array.from()

Array.from()方法將類數(shù)組轉(zhuǎn)化為數(shù)組

Array.from('foo')  // [ "f", "o", "o" ]

let set = new Set(['foo', 'bar', 'baz', 'foo'])
Array.from(set)  // [ "foo", "bar", "baz" ]

4.Array實例的方法

  1. valueOf方法返回數(shù)組本身
  2. toString方法返回數(shù)組的字符串形式
  3. push方法用于在數(shù)組的末端添加一個或多個元素,并返回添加新元素后的數(shù)組長度绰上。注意旨怠,該方法會改變原數(shù)組。
    **( 返回新的數(shù)組長度蜈块,改變原數(shù)組 )
  4. unshift方法用于在數(shù)組的第一個位置添加元素鉴腻,并返回添加新元素后的數(shù)組長度。注意百揭,該方法會改變原數(shù)組爽哎。
    **( 返回添加后新數(shù)組長度,改變原數(shù)組 )
  5. pop方法用于刪除數(shù)組的最后一個元素器一,并返回該元素倦青。注意,該方法會改變原數(shù)組盹舞。
    **( 返回刪除的最后一個元素产镐,改變原數(shù)組 )
  6. shift方法用于刪除數(shù)組的第一個元素,并返回該元素踢步。注意癣亚,該方法會改變原數(shù)組。
    **(返回刪除的第一個元素获印,改變元素組 )
  7. join方法以參數(shù)作為分隔符述雾,將所有數(shù)組成員組成一個字符串返回。如果不提供參數(shù),默認用逗號分隔玻孟。
    **( 返回參數(shù)作為分隔符的字符串 唆缴,參數(shù)是分隔符 )
  8. concat方法用于多個數(shù)組的合并。它將新數(shù)組的成員黍翎,添加到原數(shù)組的尾部面徽,然后返回一個新數(shù)組,原數(shù)組不變匣掸。
    **( 返回合并后的新數(shù)組 趟紊,不改變原數(shù)組 )
  9. reverse方法用于顛倒數(shù)組中元素的順序,返回改變后的數(shù)組碰酝。注意霎匈,該方法將改變原數(shù)組。
    **( 返回改變后的數(shù)組送爸,改變原數(shù)組 )
  10. slice方法用于提取原數(shù)組的一部分铛嘱,返回一個提取的新數(shù)組,原數(shù)組不變袭厂。
    **( 返回提取的新數(shù)組墨吓,不改變原數(shù)組 )
  11. splice方法用于刪除原數(shù)組的一部分成員,并可以在被刪除的位置添加入新的數(shù)組成員嵌器,返回值是被刪除的元素。注意谐丢,該方法會改變原數(shù)組澈侠。
    **( 返回被刪出的元素鹿霸,改變原數(shù)組)
    splice的第一個參數(shù)是 ( 刪除的起始位置 ),第二個參數(shù)是 ( 被刪除的元素個數(shù) )。如果后面還有更多的參數(shù)跟伏,則表示這些就是要被插入數(shù)組的新元素。
//刪除
let a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]

//插入
let a = [1, 1, 1];
a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
  1. sort方法對數(shù)組成員進行排序瑰谜,默認是按照字典順序排序锌历。排序后,原數(shù)組將被改變蹄葱。( 排序氏义,改變原數(shù)組 )
    如果想讓sort方法按照自定義方式排序,可以( 傳入一個函數(shù)作為參數(shù) )图云,表示按照自定義方法進行排序惯悠。該函數(shù)本身又接受兩個參數(shù),表示進行比較的兩個元素竣况。如果( 返回值 )大于0克婶,表示第一個元素排在第二個元素后面;其他情況下,都是第一個元素排在第二個元素前面情萤。
[10, 11, 9].sort(function (a, b) {
  return a - b;
})  // [9, 10, 11]

  1. map方法對數(shù)組的所有成員依次調(diào)用一個函數(shù)鸭蛙,根據(jù)函數(shù)結(jié)果返回一個新數(shù)組。
    **( 返回新數(shù)組 筋岛,不改變原數(shù)組 )
let numbers = [1, 2, 3];
numbers.map(function (n) {
  return n + 1;
});
// [2, 3, 4]
  1. forEach方法與map方法很相似娶视,也是遍歷數(shù)組的所有成員,執(zhí)行某種操作泉蝌,但是forEach方法一般不返回值歇万,只用來操作數(shù)據(jù)。如果需要有返回值勋陪,一般使用map方法贪磺。
  2. filter方法的參數(shù)是一個函數(shù) ,所有數(shù)組成員依次執(zhí)行該函數(shù)诅愚,返回結(jié)果為true的成員組成一個新數(shù)組返回寒锚。該方法不會改變原數(shù)組。
    **( 返回結(jié)果為true的成員組成的新數(shù)組违孝,不改變原數(shù)組 )
let a = [5, 12, 8, 130, 44];
let found = a.filter(element => element > 10)  // [12, 130, 44]
  1. find方法與filter相似刹前,不同的是find返回的結(jié)果為第一返回結(jié)果為true的成員
let a = [5, 12, 8, 130, 44];
let found = a.find(element => element > 10)  // 12
  1. some方法接受一個函數(shù)作為參數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù)雌桑,返回一個布爾值喇喉。只要有一個數(shù)組成員的返回值是true,則整個some方法的返回值就是true校坑,否則false拣技。
let a = [5, 12, 8, 130, 44];
a.some(element => element > 10)  // true
  1. every方法與some類似,some則是所有數(shù)組成員的返回值都是true耍目,才返回true膏斤,否則false。
let a = [5, 12, 8, 130, 44];
a.every(element => element > 10)  // false
  1. indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置邪驮,如果沒有出現(xiàn)則返回-1莫辨。
  2. lastIndexOf方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置,如果沒有出現(xiàn)則返回-1
  3. includes() 方法用來判斷一個數(shù)組是否包含一個指定的值毅访,根據(jù)情況沮榜,如果包含則返回 true,否則返回false敞映。
  4. flat() 方法會按照一個可指定的深度(指定要提取嵌套數(shù)組的結(jié)構(gòu)深度,默認值為 1)遞歸遍歷數(shù)組磷斧,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個新數(shù)組返回(數(shù)組扁平化)
    **( 返回扁平化的新數(shù)組捷犹,不改變原數(shù)組 )
let a = [0, 1, 2, [3, 4]]
a.flat() // [0, 1, 2, 3, 4]

// 如果不知道嵌套深度可指定參數(shù)為 Infinity
let a = [1,2,3,[1,2,3,4, [2],[3,4]]]
a.flat(Infinity)  // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冕末,一起剝皮案震驚了整個濱河市萍歉,隨后出現(xiàn)的幾起案子档桃,更是在濱河造成了極大的恐慌,老刑警劉巖藻肄,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘹屯,居然都是意外死亡攻询,警方通過查閱死者的電腦和手機州弟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婆翔,“玉大人,你說我怎么就攤上這事啃奴√杜悖” “怎么了最蕾?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵依溯,是天一觀的道長。 經(jīng)常有香客問我揖膜,道長誓沸,這世上最難降的妖魔是什么梅桩? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任壹粟,我火速辦了婚禮,結(jié)果婚禮上宿百,老公的妹妹穿的比我還像新娘趁仙。我一直安慰自己,他們只是感情好垦页,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布雀费。 她就那樣靜靜地躺著,像睡著了一般痊焊。 火紅的嫁衣襯著肌膚如雪盏袄。 梳的紋絲不亂的頭發(fā)上忿峻,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音辕羽,去河邊找鬼逛尚。 笑死,一個胖子當著我的面吹牛刁愿,可吹牛的內(nèi)容都是我干的绰寞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铣口,長吁一口氣:“原來是場噩夢啊……” “哼滤钱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脑题,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤件缸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旭蠕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體停团,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年掏熬,在試婚紗的時候發(fā)現(xiàn)自己被綠了佑稠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡旗芬,死狀恐怖舌胶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疮丛,我是刑警寧澤幔嫂,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站誊薄,受9級特大地震影響履恩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呢蔫,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一切心、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧片吊,春花似錦绽昏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爷贫。三九已至补憾,卻和暖如春卷员,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背子刮。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葵孤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓尤仍,卻偏偏與公主長得像狭姨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饼拍,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355