數(shù)組的常用方法總結(jié)

一、基本使用
1油猫、數(shù)組的創(chuàng)建
(1) 通過(guò)[]

let arr1 = [1, 2, 3, 4, 5]

(2) 通過(guò)創(chuàng)建構(gòu)造函數(shù) Array的實(shí)例

let arr2 = new Array(1, 2, 3, 4, 5)
console.log(arr2) // [1, 2, 3, 4, 5]

需要注意的是稠茂,如果構(gòu)造函數(shù)中傳入的參數(shù)只有一個(gè)數(shù)字,此時(shí)會(huì)被認(rèn)為這個(gè)數(shù)字為數(shù)組的長(zhǎng)度情妖,如下所示

let arr3 = new Array(6) // 并不是代表創(chuàng)建 [6], 而是創(chuàng)建長(zhǎng)度為6的空數(shù)組
console.log('arr3--',arr3)
構(gòu)造函數(shù)創(chuàng)建空數(shù)組.png

想要解決這個(gè)問題可以通過(guò)下面這種方式創(chuàng)建數(shù)組
(3) 使用Array構(gòu)造函數(shù)上的靜態(tài)方法 Array.of

let arr4 = Array.of(6)
console.log(arr4) // [6]

也可以傳入多個(gè)數(shù)字睬关,此時(shí)和 new Array() 用法一致

let arr5 = Array.of(1, 2, 3, 4, 5)
console.log(arr5) // [1, 2, 3, 4, 5]

2、數(shù)組轉(zhuǎn)字符串
以下有三種方法都可以使數(shù)組變成字符串毡证,toString()和String()會(huì)給每個(gè)字符以逗號(hào)(电爹,)分隔,join以傳入的指定分隔符分隔料睛,不傳的時(shí)候就不會(huì)有分隔符

let list1 = ['a', 'b', 'c']

let arr1 = list1.toString()
let arr2 = String(list1)
let arr3 = list1.join('')

console.log('arr1--',arr1) // a,b,c
console.log('arr2--',arr2) // a,b,c
console.log('arr3--',arr3) // abc

3丐箩、字符串轉(zhuǎn)數(shù)組
使用split對(duì)數(shù)組進(jìn)行分割,可以看作是join的反向操作恤煞,Array的靜態(tài)方法from屎勘,只要該數(shù)據(jù)類型有l(wèi)ength屬性,就可以使用 Array.from 將它轉(zhuǎn)成數(shù)組

let message = 'hello'
let list1 = message.split('')
let list2 = Array.from(message)

console.log('list1--', list1) // ["h", "e", "l", "l", "o"]
console.log('list2--', list2) // ["h", "e", "l", "l", "o"]

4居扒、循環(huán)
數(shù)組的循環(huán)方式非常多概漱,可以根據(jù)不同的場(chǎng)景需要選擇不同的循環(huán)方式

let list = [ 'a', 'b', 'c', 'd' ]
for(let i = 0; i < list.length; i ++)
for(let i in list)
for(let item of list)
list.map()
list.forEach()

5、展開語(yǔ)法
我們知道喜喂,當(dāng)一個(gè)數(shù)組賦值給一個(gè)變量的時(shí)候犀概,賦值的是內(nèi)存地址,當(dāng)原數(shù)組發(fā)生了改變的時(shí)候夜惭,被賦值的變量也會(huì)發(fā)生改變姻灶。
有時(shí)候我們并不希望兩個(gè)數(shù)組指向同一片內(nèi)存地址,這時(shí)候使用展開語(yǔ)法就能很好的解決問題诈茧。
展開語(yǔ)法相當(dāng)于把數(shù)組里的每一個(gè)元素都拿出來(lái)产喉,放到一個(gè)新的數(shù)組里,這個(gè)新數(shù)組指向的新的內(nèi)存空間敢会。

let list1 = ['kiki', 'alice']
let list2 = list1
let list3 = [...list1]

list1.push('windy')
console.log('list1--', list1) // ["kiki", "alice", "windy"]
console.log('list2--', list2) // ["kiki", "alice", "windy"]
console.log('list3--', list3) // ["kiki", "alice"]

6曾沈、解構(gòu)賦值
解構(gòu)賦值在對(duì)象里更常用一些,不過(guò)數(shù)組中也是可以使用解構(gòu)賦值的鸥昏,解構(gòu)定義的變量與數(shù)組的索引值一一對(duì)應(yīng)

let user = [ 'kiki', 15 ]
let [ name, age ] = user

console.log(name, age) // kiki 15

二塞俱、增刪改查
1、增加
push 從尾部增加, 返回值為數(shù)組的長(zhǎng)度
unshift 從頭部增加, 返回值為數(shù)組的長(zhǎng)度

let list = ['a', 'b', 'c', 'd']
    
console.log(list.push('x')) // 5
console.log(list.unshift('y')) // 6
console.log(list) // ["y", "a", "b", "c", "d", "x"]

2吏垮、刪除
pop 從尾部刪除元素, 返回值為刪除的元素
shift 從頭部刪除元素, 返回值為刪除的元素

let list = ['a', 'b', 'c', 'd']
    
console.log(list.pop()) // d
console.log(list.shift()) // a
console.log(list) // ["b", "c"]

3障涯、修改
splice這個(gè)方法很好用罐旗,可以刪除、增加唯蝶、修改原數(shù)組九秀,第一個(gè)參數(shù)傳遞的是需要定位到的索引值,第二個(gè)參數(shù)傳遞從當(dāng)前索引值開始往后數(shù)幾位數(shù)需要被刪除粘我,第三個(gè)參數(shù)開始傳遞的是需要增加的參數(shù)鼓蜒。
當(dāng)不傳第三個(gè)參數(shù)時(shí),表示刪除元素征字,當(dāng)傳遞的第二個(gè)參數(shù)為0時(shí)都弹,表示數(shù)組里一個(gè)元素都不刪除,第三個(gè)往后的參數(shù)都可以添加到當(dāng)前數(shù)組中

let list = ['a', 'b', 'c', 'd']
list.splice(2, 1, 'kiki')
console.log(list) // ["a", "b", "kiki", "d"]

4匙姜、查找
(1) 查找該元素第一次出現(xiàn)的索引值位置 indexOf從頭部開始計(jì)算畅厢、lastIndexOf從尾部開始計(jì)算

let list = ['a', 'b', 'c', 'd', 'a', 'b', 'c']

console.log(list.indexOf('a')) // 0
console.log(list.lastIndexOf('a')) // 4

(2) 查找元素,傳遞一個(gè)查找規(guī)則的函數(shù)
find 查找數(shù)組中是否有存在符合條件的元素搁料,存在即返回第一個(gè)符合條件的元素
findIndex 查找數(shù)組中是否有存在符合條件的元素,存在即返回第一個(gè)符合條件的元素索引值

let users = [
   { name: 'kiki', age: 16 },
   { name: 'alice', age: 17 },
   { name: 'macus', age: 18 }
]
let item = users.find(item=>{
   return item.age > 16
})
let index = users.findIndex(item=>{
   return item.age > 16
})
console.log(item) // { name: 'alice', age: 17 }
console.log(index) // 1

(3) 判斷元素是否存在于該數(shù)組中 includes

let list = ['a', 'b', 'c', 'd']
 
console.log(list.includes('c')) // true
console.log(list.includes('f')) // false

(4) 判斷元素是否符合條件
every 用來(lái)判斷是否所有元素符合條件
some 用來(lái)判斷是否有一個(gè)元素符合條件

let users = [
   { name: 'kiki', age: 16 },
   { name: 'alice', age: 17 },
   { name: 'macus', age: 18 }
]
let someFlag = users.some(item=>{
   return item.age > 16
})
let everyFlag = users.every(item=>{
   return item.age > 16
})
console.log(someFlag) // true
console.log(everyFlag) //false

三系羞、復(fù)雜操作
1郭计、合并元素,可以通過(guò) concat 或者展開語(yǔ)法椒振,兩種方式都不會(huì)改變?cè)瓟?shù)組

let list1 = ['a', 'b', 'c']
let list2 = [2, 4, 6]
let newList = list1.concat(list2)
let newArr = [...list1, ...list2]

console.log(list1) // ["a", "b", "c"]
console.log(list2) // [2, 4, 6]
console.log(newList) // ["a", "b", "c", 2, 4, 6]
console.log(newArr) // ["a", "b", "c", 2, 4, 6]

2昭伸、清空數(shù)組
(1) 將數(shù)組賦值為空數(shù)組 []

let list = [ 'a', 'b', 'c', 'd' ]
list = []

這樣的方式可能存在一個(gè)問題,如果將list賦值給另外的數(shù)組澎迎,直接將list賦值為空時(shí)庐杨,arr的值并不會(huì)發(fā)生改變,因?yàn)樽畛醯臅r(shí)候夹供,arr和list都指向同一個(gè)內(nèi)存地址灵份,當(dāng)list重新賦值后,則指向新的內(nèi)存地址哮洽,此時(shí)arr仍然指向原來(lái)的內(nèi)存地址

let list = [ 'a', 'b', 'c', 'd' ]
let arr = list
list = []
console.log(arr) // [ 'a', 'b', 'c', 'd' ]
console.log(list) // []

(2) 將元素的長(zhǎng)度設(shè)置為0

let list = [ 'a', 'b', 'c', 'd' ]
let arr = list
list.length = 0
console.log(list) // []
console.log(arr) // []

(3) 通過(guò) splice 截取數(shù)組

let list = [ 'a', 'b', 'c', 'd' ]
let arr = list
list.splice(0, list.length)
console.log(list) // []
console.log(arr) // []

(4) 不斷的從頭部/尾部刪除元素

let list = [ 'a', 'b', 'c', 'd' ]
let arr = list
while(list.pop()){}
console.log(list) // []
console.log(arr) // []

3填渠、過(guò)濾
filter與find不同,find只找出第一個(gè)符合條件的元素鸟辅,但是filter會(huì)篩選中符合條件的所有元素

let users = [
   { name: 'kiki', age: 16 },
   { name: 'alice', age: 17 },
   { name: 'macus', age: 18 }
]
let items = users.filter(item=>{
   return item.age > 16
})
console.log(items)
// [{ name: 'alice', age: 17 }, { name: 'macus', age: 18 }]

4氛什、排序
sort也需要傳入一個(gè)函數(shù),當(dāng)傳入的參數(shù)為 a - b匪凉,排序?yàn)檎?/p>

let list = [8, 5, 6, 7, 9, 12, 3]

list.sort((a, b)=>{
  return a - b
})
console.log(list) // [3, 5, 7, 8, 9, 12]

5枪眉、累加 reduce
reduce傳入回調(diào)函數(shù)的參數(shù)會(huì)稍微多一點(diǎn),比其他的函數(shù)要難理解一些再层。
第一個(gè)參數(shù)pre代表前一次執(zhí)行reduce的結(jié)果贸铜,這里的操作是累加堡纬,reduce函數(shù)還可以傳入第二個(gè)參數(shù),代表初始化的值萨脑,如果沒有傳隐轩,pre就會(huì)取數(shù)組的第一個(gè)值。
回調(diào)函數(shù)里第二個(gè)參數(shù)current代表當(dāng)前元素的值渤早,第三個(gè)參數(shù)index代表當(dāng)前元素的索引值职车,第四個(gè)參數(shù)代表執(zhí)行reduce函數(shù)的數(shù)組

let list = [8, 5, 6, 7, 9, 12, 3]
let total = list.reduce(function(pre, current, index, arr){
    console.log(pre, current, index, arr)
    return pre + current
})
console.log(total)
累加.png

以上就是數(shù)組常用的方法,可能還有一些方法沒有歸納進(jìn)來(lái)鹊杖,歡迎大家進(jìn)行補(bǔ)充~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悴灵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子骂蓖,更是在濱河造成了極大的恐慌积瞒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件登下,死亡現(xiàn)場(chǎng)離奇詭異茫孔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)被芳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門缰贝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人畔濒,你說(shuō)我怎么就攤上這事剩晴。” “怎么了侵状?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赞弥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我趣兄,道長(zhǎng)绽左,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任艇潭,我火速辦了婚禮妇菱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暴区。我一直安慰自己闯团,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布仙粱。 她就那樣靜靜地躺著房交,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伐割。 梳的紋絲不亂的頭發(fā)上候味,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天刃唤,我揣著相機(jī)與錄音,去河邊找鬼白群。 笑死尚胞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帜慢。 我是一名探鬼主播笼裳,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粱玲!你這毒婦竟也來(lái)了躬柬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抽减,失蹤者是張志新(化名)和其女友劉穎允青,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卵沉,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠锉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了史汗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼掠。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淹办,靈堂內(nèi)的尸體忽然破棺而出眉枕,到底是詐尸還是另有隱情恶复,我是刑警寧澤怜森,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站谤牡,受9級(jí)特大地震影響副硅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翅萤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一恐疲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧套么,春花似錦培己、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至玷室,卻和暖如春零蓉,著一層夾襖步出監(jiān)牢的瞬間笤受,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工敌蜂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箩兽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓章喉,卻偏偏與公主長(zhǎng)得像汗贫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子囊陡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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