JavaScript學(xué)習(xí)筆記-Array相關(guān)方法的使用

sort()方法的使用

  • 在默認(rèn)情況下,sort()是按升序排列數(shù)組钝尸,sort()方法會調(diào)用每個(gè)數(shù)組項(xiàng)的toString()方法括享,比較得到的字符串,以確定如何排序珍促。即使數(shù)組中的每一項(xiàng)都是數(shù)值,sort()方法比較的也是字符串铃辖。
var values = [0, 1, 5, 10, 15]
values.sort()
console.log(values) // [0, 1, 10, 15, 5]
// 例子中值得順序本身沒有問題,調(diào)用sort()方法也會根據(jù)字符串的結(jié)果改變原來的順序猪叙。
// 數(shù)值5雖然小于10娇斩,但在進(jìn)行字符串比較的時(shí)候"10" 在 "5" 的前面,所以數(shù)組的順序就被修改了
  • sort()方法可以接收一個(gè)函數(shù)作為參數(shù)穴翩,我們自己來指定如何進(jìn)行排序
  • 比較函數(shù)接收2個(gè)參數(shù)犬第,如果第1個(gè)參數(shù)應(yīng)該位于第2個(gè)參數(shù)之前返回-1,如果2個(gè)參數(shù)相等返回0藏否,如果第1個(gè)參數(shù)應(yīng)該位于第2個(gè)參數(shù)之后返回1瓶殃。
var values = [0, 1, 5, 10, 15]
values.sort((value1, value2) => {
  if (value1 < value2) {
    return -1
  } else if (value1 > value2) {
    return 1
  } else {
    return 0
  }
})
console.log(values)
// [0, 1, 5, 10, 15]
  • 需求:根據(jù)年齡大小充包,對對象數(shù)組進(jìn)行升序排列
var objs = [
  {name: "Kobe", age: 42},
  {name: "YaoMing", age: 40},
  {name: "Lebron", age: 36}
]

objs.sort((obj1, obj2) => {
  return obj1.age - obj2.age
})

console.log(objs)
// 0: {name: "Lebron", age: 36}
// 1: {name: "YaoMing", age: 40}
// 2: {name: "Kobe", age: 42}

splice()方法的使用

  • splice()方法的作用:可以給數(shù)組刪除元素副签、替換元素、插入元素基矮。該方法可以傳遞3個(gè)參數(shù)淆储,傳遞參數(shù)的不同可以達(dá)到不同的效果

  • 刪除元素:傳入2個(gè)參數(shù)splice(起始位置的索引家浇,要?jiǎng)h除的元素個(gè)數(shù))本砰。

const names = ["姚明", "王治郅", "易建聯(lián)", "科比", "詹姆斯"]
names.splice(1, 2)
console.log(names) // ["姚明", "科比", "詹姆斯"]
  • 替換元素:傳入3個(gè)參數(shù)splice(起始位置的索引, 要替換的元素個(gè)數(shù), 要替換的元素(可以傳多個(gè)))
  • 這里注意钢悲,第3個(gè)參數(shù)是一個(gè)可變參數(shù)点额,可以傳入多個(gè)值
const names = ["姚明", "王治郅", "易建聯(lián)", "科比", "詹姆斯"]
names.splice(1, 2, "霍華德", "安東尼")
console.log(names) // ["姚明", "霍華德", "安東尼", "科比", "詹姆斯"]
  • 插入元素莺琳,傳入3個(gè)參數(shù)还棱,splice(起始位置的索引,0惭等,要插入的元素(可以傳多個(gè)))
  • 這里注意:第2個(gè)參數(shù)傳0
const names = ["姚明", "王治郅", "易建聯(lián)", "科比", "詹姆斯"]
names.splice(1, 0, "霍華德", "安東尼")
console.log(names) // ["姚明", "霍華德", "安東尼", "王治郅", "易建聯(lián)", "科比", "詹姆斯"]

高階函數(shù)的使用

定義3個(gè)需求:

需求1:定義一個(gè)數(shù)字?jǐn)?shù)組nums珍手,找出數(shù)組中數(shù)值小于100的數(shù)字,放入一個(gè)新數(shù)組中newNums

需求2:將新數(shù)組(newNums)中的數(shù)字都乘以2,放入新的數(shù)組doubleNums

需求3:將doubleNums中的數(shù)字進(jìn)行匯總求和

  • 傳統(tǒng)做法(使用for循環(huán))
const nums = [10, 20, 30, 289, 2332, 40]
const newNums = []
for (let n of nums) {
  if (n < 100) {
    newNums.push(n)
  }
}
console.log(newNums) // [10, 20, 30, 40]

const doubleNums = []
for (let n of newNums) {
  doubleNums.push(n * 2)
}
console.log(doubleNums) // [20, 40, 60, 80]

let total = 0
for (let n of doubleNums) {
  total += n
}
console.log(total) // 200
  • 使用數(shù)組的高階函數(shù)
  • filter()
    • filter()函數(shù)接收一個(gè)回調(diào)函數(shù)作為參數(shù)琳要,該回調(diào)函數(shù)接收一個(gè)參數(shù)寡具,這個(gè)參數(shù)就是遍歷數(shù)組時(shí)的每一個(gè)元素
    • 回調(diào)函數(shù)必須要返回一個(gè)boolean類型
    • 如果返回的是true,那么就將傳遞過來的參數(shù)稚补,加入到一個(gè)新的數(shù)組中
    • 如果返回的是false童叠,那么就將傳遞過來的參數(shù)忽略掉
    • 當(dāng)filter()函數(shù)執(zhí)行完畢后,會返回過濾后的新的數(shù)組课幕。
// 使用filter()函數(shù)改寫需求1
const nums = [10, 20, 30, 289, 2332, 40]
const newNums = nums.filter((n) => {
  return n < 100
})
console.log(newNums); // [10, 20, 30, 40]
  • map()
    • map()函數(shù)接收一個(gè)回調(diào)函數(shù)作為參數(shù)拯钻,該回調(diào)函數(shù)同樣接收一個(gè)參數(shù),這個(gè)參數(shù)是遍歷數(shù)組時(shí)的每一個(gè)元素
    • 回調(diào)函數(shù)同樣有一個(gè)返回值撰豺,map()函數(shù)會將回調(diào)函數(shù)的返回值放入到一個(gè)新的數(shù)組
    • 當(dāng)map()函數(shù)執(zhí)行完畢之后粪般,將新的數(shù)組作為返回值返回
// 使用map()函數(shù)改寫需求2
const doubleNums = newNums.map((n) => {
  return n * 2
})
console.log(doubleNums) // [20, 40, 60, 80]
  • reduce():可以用來匯總結(jié)果
    • reduce()函數(shù)接收2個(gè)參數(shù),第1個(gè)參數(shù)接收一個(gè)回調(diào)函數(shù)作為參數(shù)污桦,該回調(diào)函數(shù)接收2個(gè)參數(shù)亩歹,該回調(diào)函數(shù)執(zhí)行的次數(shù)就是遍歷的次數(shù)
    • 回調(diào)函數(shù)的第1個(gè)參數(shù),上一次遍歷匯總的結(jié)果
    • 回調(diào)函數(shù)的第2個(gè)參數(shù)凡橱,每次遍歷的數(shù)組的元素
    • 第2個(gè)參數(shù)是匯總的初始值
    • reduce()函數(shù)執(zhí)行完畢后小作,返回匯總后的值
// 使用reduce()函數(shù)改寫需求3
const total = doubleNums.reduce((previousValue, n) => {
  return previousValue + n
}, 0)
console.log(total)  // 200
  • 通過使用高階函數(shù),可以進(jìn)行鏈?zhǔn)秸{(diào)用稼钩,將三個(gè)函數(shù)連在一起顾稀,完成上面的三個(gè)需求,這種編程范式就是函數(shù)式編程
const nums = [10, 20, 30, 289, 2332, 40]
const total = nums.filter((n) => {
  return n < 100
}).map((n) => {
  return n * 2
}).reduce((previousValue, n) => {
  return previousValue + n
}, 0)
console.log(total) // 200

持續(xù)更新~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坝撑,一起剝皮案震驚了整個(gè)濱河市静秆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巡李,老刑警劉巖抚笔,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侨拦,居然都是意外死亡殊橙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門狱从,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膨蛮,“玉大人,你說我怎么就攤上這事季研〕ǜ穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵训貌,是天一觀的道長制肮。 經(jīng)常有香客問我冒窍,道長,這世上最難降的妖魔是什么豺鼻? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任综液,我火速辦了婚禮,結(jié)果婚禮上儒飒,老公的妹妹穿的比我還像新娘谬莹。我一直安慰自己,他們只是感情好桩了,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布附帽。 她就那樣靜靜地躺著,像睡著了一般井誉。 火紅的嫁衣襯著肌膚如雪蕉扮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天颗圣,我揣著相機(jī)與錄音喳钟,去河邊找鬼。 笑死在岂,一個(gè)胖子當(dāng)著我的面吹牛奔则,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔽午,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼易茬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了及老?” 一聲冷哼從身側(cè)響起抽莱,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎写半,沒想到半個(gè)月后岸蜗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尉咕,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叠蝇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了年缎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悔捶。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖单芜,靈堂內(nèi)的尸體忽然破棺而出蜕该,到底是詐尸還是另有隱情,我是刑警寧澤洲鸠,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布堂淡,位于F島的核電站馋缅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绢淀。R本人自食惡果不足惜萤悴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望皆的。 院中可真熱鬧覆履,春花似錦、人聲如沸费薄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楞抡。三九已至伟众,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間召廷,已是汗流浹背赂鲤。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柱恤,地道東北人数初。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像梗顺,于是被迫代替她去往敵國和親泡孩。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355