JavaScript中數(shù)組的操作


總結(jié)一下項(xiàng)目中常用的數(shù)組的操作

如有不對的地方,歡迎指出

抱拳了

concat

concat 會合并兩個數(shù)組

const arr = [5, 17, 6, 8]
const arr1 = [5, 17, 6, 8, 6, 8]

arr.concat(arr1)
// [5, 17, 6, 8, 5, 17, 6, 8, 6, 8]

replace

replace 用于在字符串中用一些字符替換另一些字符谴返,或替換一個與正則表達(dá)式匹配的子串蓬衡。

// 表單驗(yàn)證需要判斷20個字符,一個漢字等于2個字符
// 正則匹配所有的漢字,然后替換成字符,可以隨意定義
value.replace(/[^/x00-\xff]/g, '**').length > 20

some

匹配數(shù)組中每一個元素,如果有一個元素通過由提供的函數(shù)實(shí)現(xiàn)的測試,則立刻返回true,否則返回false

  // 可以用到的地方就很多了,比如需要判斷返回的數(shù)據(jù)中存不存在某個元素,就可以用這個方法來判斷
const arr = [5, 17, 6, 8]

arr.some(e => { return  e > 9 }) // true

every

匹配數(shù)組中每一個元素,如果所有元素都通過由提供的函數(shù)實(shí)現(xiàn)的測試,則返回true,有一個沒有通過則返回false

const arr = [5, 17, 6, 8]

arr.every(e => { return  e > 9 }) // false

filter

篩選出數(shù)組中符合條件的元素,組成一個新的數(shù)組

const arr = [5, 17, 6, 8]

// 可以過濾出想要的元素再進(jìn)行操作
arr.concat(arr1).filter(e => {return e > 7}) // [17, 8]

map

數(shù)組中的每個元素都調(diào)用一個提供的函數(shù)后返回一個新數(shù)組

const kvArr = [
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 2, value: 20},
    {key: 3, value: 30},
    {key: 4, value: 30},
]

kvArr.map(item => item.key).filter(e => e > 1) //  [2, 3, 4]

forEach

讓數(shù)組中的每一項(xiàng)做一件事

const kvArr = [
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 2, value: 20},
    {key: 3, value: 30},
    {key: 4, value: 30},
]

kvArr.forEach(item => console.log(item))
// {key: 1, value: 10}
// {key: 1, value: 10}
// {key: 1, value: 10}
// {key: 2, value: 20}
// {key: 3, value: 30}
// {key: 4, value: 30}

push

將一個或多個元素添加到數(shù)組的末尾谨读,并返回新數(shù)組的長度

const arr = [5, 17, 6, 8]

arr.push(4) // 5

includes

方法用來判斷一個數(shù)組是否包含一個指定的值,返回 true或 false

const arr = [5, 17, 6, 8]

arr.includes(5) true

join

將數(shù)組(或一個類數(shù)組對象)的所有元素連接到一個字符串中

const kvArr = [
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 1, value: 10},
    {key: 2, value: 20},
    {key: 3, value: 30},
    {key: 4, value: 30},
]

kvArr.map(item => {return item.key}).join(',')
//1,1,1,2,3,4

reduce

從左到右為每個數(shù)組元素執(zhí)行一次回調(diào)函數(shù)扎谎,并把上次回調(diào)函數(shù)的返回值放在一個暫存器中傳給下次回調(diào)函數(shù)危喉,并返回最后一次回調(diào)函數(shù)的返回值抢埋。


數(shù)組去重

  • 第一種方法
// new Set 中的元素只可以出現(xiàn)一次,返回一個新的Set對象
// Array.from()再從一個類似數(shù)組或可迭代對象中創(chuàng)建一個新的數(shù)組實(shí)例
Array.from(new Set(kvArr.map(item => item.key)))

//可以用es6的 ... 的解構(gòu)賦值
[...new Set(kvArr.map(item => item.key))]
  • 第二種方法
// 定義一個空數(shù)組 let ret = []
// include判斷是否包含元素
// push 如果不包含,則push到ret
let ret = []
kvArr.map(item => item.key).map(e => {
    if (!ret.includes(e)) {
      ret.push(e)
      return ret
    }
})
ret.map(a => {
    switch(a) {
        case 1 :
          return console.log(111)
        case 2 :
          return console.log(222)
    }
})

數(shù)組求和

  • 這里要先明白一點(diǎn)

JavaScript數(shù)組方法是特意定義為通用的弹灭,因此他們不僅應(yīng)用在真正的數(shù)組,而且在類數(shù)組(包括String)對象上也能正確工作,
但是類數(shù)組對??無法繼承自Array.prototype,所以可以通過Function.call間接地調(diào)用揪垄。

// arguments對象 包含傳遞給函數(shù)的每個參數(shù)
// call的第一個參數(shù)表示真正調(diào)用reduce的環(huán)境變?yōu)榱薬rguments對象
// 也就是reduce方法中的this是指向arguments的穷吮。所以就好像arguments也具有了數(shù)組的方法。
// 能調(diào)用call的只有方法饥努,所以不能用[].call這種形式捡鱼,得用[].reduce.call
function sum(){
    return [].reduce.call(arguments,function(x,b){
         return (x|0)+(b|0);
    })
}
sum(1, true, 'a', 'D', 1, 'F', 1, 'w')
// 4

數(shù)組排序

  • 可以用sort()方法

需要注意的是:sort()方法默認(rèn)排序順序是根據(jù)字符串Unicode碼點(diǎn)。所以需要用函數(shù)表達(dá)式來實(shí)現(xiàn)數(shù)組的排序

[2,51,11,62,91,4,4,444,33,5].sort((x,y) => x-y)
// [2, 4, 4, 5, 11, 33, 51, 62, 91, 444]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酷愧,一起剝皮案震驚了整個濱河市堰汉,隨后出現(xiàn)的幾起案子辽社,更是在濱河造成了極大的恐慌,老刑警劉巖翘鸭,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滴铅,死亡現(xiàn)場離奇詭異,居然都是意外死亡就乓,警方通過查閱死者的電腦和手機(jī)汉匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來生蚁,“玉大人噩翠,你說我怎么就攤上這事“钔叮” “怎么了伤锚?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長志衣。 經(jīng)常有香客問我屯援,道長,這世上最難降的妖魔是什么念脯? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任狞洋,我火速辦了婚禮,結(jié)果婚禮上绿店,老公的妹妹穿的比我還像新娘吉懊。我一直安慰自己,他們只是感情好假勿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布借嗽。 她就那樣靜靜地躺著,像睡著了一般转培。 火紅的嫁衣襯著肌膚如雪淹魄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天堡距,我揣著相機(jī)與錄音甲锡,去河邊找鬼。 笑死羽戒,一個胖子當(dāng)著我的面吹牛缤沦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播易稠,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缸废,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起企量,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤测萎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后届巩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硅瞧,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年恕汇,在試婚紗的時候發(fā)現(xiàn)自己被綠了腕唧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘾英,死狀恐怖枣接,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缺谴,我是刑警寧澤但惶,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站湿蛔,受9級特大地震影響膀曾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煌集,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一妓肢、第九天 我趴在偏房一處隱蔽的房頂上張望捌省。 院中可真熱鬧苫纤,春花似錦、人聲如沸纲缓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祝高。三九已至栗弟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間工闺,已是汗流浹背乍赫。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陆蟆,地道東北人雷厂。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像叠殷,于是被迫代替她去往敵國和親改鲫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,148評論 0 13
  • ??引用類型的值(對象)是引用類型的一個實(shí)例。 ??在 ECMAscript 中缕题,引用類型是一種數(shù)據(jù)結(jié)構(gòu)截歉,用于將數(shù)...
    霜天曉閱讀 1,054評論 0 1
  • 一直以來想要練習(xí)冥想,陸陸續(xù)續(xù)地也收集了不少資料避除,那些文字或視頻存在網(wǎng)頁或本地的收藏夾里怎披,但我從來沒有細(xì)細(xì)地看...
    息有狐閱讀 429評論 0 1
  • 有這么一個人,過去他對我很重要瓶摆,當(dāng)然凉逛,現(xiàn)在也很重要,只是我做了傷害他的事情群井。 過去状飞,我做事情時,總要問問他的意見书斜,...
    淡藍(lán)成靛閱讀 262評論 0 0
  • (4)額...奇遇記? 期中考試終于結(jié)束了诬辈。考的好的荐吉,考的差的焙糟,一起松了口氣。 同學(xué)甲:“把馈穿撮!現(xiàn)在才感覺自己是活的...
    清如淺閱讀 316評論 2 3