<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內(nèi)容,歡迎關(guān)注:

    視頻號(hào)
    視頻號(hào)

    抖音
    抖音

    快手
    快手

    微博
    微博

    數(shù)組拆分成多個(gè)數(shù)組

    文檔

    數(shù)組拆分成多個(gè)數(shù)組

    一般的方法此處也不列舉了,還是有很多的,如雙層循環(huán)判斷是否相等,或新建數(shù)組比較再push等等,需要注意的是,使用splice方法移除元素時(shí),有可能會(huì)導(dǎo)致數(shù)組塌陷問(wèn)題,需要處理一下。本文中介紹了多種數(shù)組去重的方法,使用了較多的高階方法及API,并給出相應(yīng)解釋及語(yǔ)法,還有其他多種組合調(diào)用方式,原理邏輯其實(shí)都差不多,其中for循環(huán)可以與forEach方法相互轉(zhuǎn)換,因此此處便不再一一列舉,大家如果有更好的算法,可以留言給我,虛心請(qǐng)教。給定一個(gè)數(shù)組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復(fù)項(xiàng)。
    推薦度:
    導(dǎo)讀一般的方法此處也不列舉了,還是有很多的,如雙層循環(huán)判斷是否相等,或新建數(shù)組比較再push等等,需要注意的是,使用splice方法移除元素時(shí),有可能會(huì)導(dǎo)致數(shù)組塌陷問(wèn)題,需要處理一下。本文中介紹了多種數(shù)組去重的方法,使用了較多的高階方法及API,并給出相應(yīng)解釋及語(yǔ)法,還有其他多種組合調(diào)用方式,原理邏輯其實(shí)都差不多,其中for循環(huán)可以與forEach方法相互轉(zhuǎn)換,因此此處便不再一一列舉,大家如果有更好的算法,可以留言給我,虛心請(qǐng)教。給定一個(gè)數(shù)組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復(fù)項(xiàng)。

    一般的方法此處也不列舉了,還是有很多的,如雙層循環(huán)判斷是否相等,或新建數(shù)組比較再push等等,需要注意的是,使用splice方法移除元素時(shí),有可能會(huì)導(dǎo)致數(shù)組塌陷問(wèn)題,需要處理一下

    本文中介紹了多種數(shù)組去重的方法,使用了較多的高階方法及API,并給出相應(yīng)解釋及語(yǔ)法,還有其他多種組合調(diào)用方式,原理邏輯其實(shí)都差不多,其中for循環(huán)可以與forEach方法相互轉(zhuǎn)換,因此此處便不再一一列舉,大家如果有更好的算法,可以留言給我,虛心請(qǐng)教!!

    給定一個(gè)數(shù)組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復(fù)項(xiàng)

    let arr = [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4]

    1. 利用對(duì)象的 key 唯一眾所周知,對(duì)象的key不可重復(fù),否則后者將覆蓋前者。利用該特性,實(shí)現(xiàn)數(shù)組去重,遍歷數(shù)組,將數(shù)組的每一項(xiàng)做為對(duì)象的key值

    let obj = {};

    for (let i = 0; i < arr.length; i++) {

    let item = arr[i]

    if (obj[item] !== undefined) {

    arr.splice(i, 1);

    i–; // 解決刪除元素后,數(shù)組塌陷問(wèn)題

    continue;

    }

    obj[item] = item

    }

    // arr: [1, 2, 4, null, “3”, “abc”, 3, 5]

    2. 交換元素位置從而替換調(diào) splice方法上述方法存在一定的性能問(wèn)題,也就是說(shuō),基于splice實(shí)現(xiàn)刪除性能不太好,當(dāng)前項(xiàng)被刪除后,隨后每一項(xiàng)的索引都要向前移動(dòng)一位,數(shù)據(jù)量較龐大時(shí),一定會(huì)影響性能。

    基于以上考慮,交換元素的位置,效率會(huì)更高一點(diǎn),若當(dāng)前元素重復(fù),則與數(shù)組最后一位元素交換位置,i–再次進(jìn)行判斷即可,同時(shí)length–,操作數(shù)組的長(zhǎng)度實(shí)現(xiàn)刪除數(shù)組的最后一個(gè)元素,這樣便不會(huì)影響到數(shù)組中其他元素

    let obj = {};

    for (let i = 0; i < arr.length; i++) {

    let item = arr[i]

    if (obj[item] !== undefined) {

    arr[i] = arr[arr.length-1]

    arr.length–;

    i–;

    continue;

    }

    obj[item] = item

    }

    // arr: [1, 2, 4, null, “3”, “abc”, 3, 5]

    3. Array.filter + Array.indexOffilter() 方法:創(chuàng)建一個(gè)新數(shù)組,新數(shù)組中的元素是指定數(shù)組中符合某種條件的所有元素。如果沒(méi)有符合條件的元素則返回空數(shù)組。

    語(yǔ)法:array.filter(function(item,index,arr))

    filter() 不會(huì)對(duì)空數(shù)組進(jìn)行檢測(cè)。

    filter() 不會(huì)改變?cè)紨?shù)組。

    原理:返回 item 第一次出現(xiàn)的位置等于當(dāng)前的index的元素

    let newArr = arr.filter((item, index) => arr.indexOf(item) === index);

    // [1, 2, 4, null, “3”, “abc”, 3, 5]

    4. Array.filter + Object.hasOwnPropertyhasOwnProperty() 方法:返回一個(gè)布爾值,表示對(duì)象自身屬性中是否具有指定的屬性

    原理:利用對(duì)象的鍵名不可重復(fù)的特點(diǎn)

    let obj = {}

    arr.filter(item => obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true))

    5. Array.reduce + Array.includesreduce() 方法:接收一個(gè)函數(shù)作為累加器,數(shù)組中的每個(gè)值從左到右開(kāi)始計(jì)算,最終計(jì)算為一個(gè)值。

    語(yǔ)法:arr.reduce(function(total, currValue, currIndex, arr), initValue)

    reduce() 對(duì)于空數(shù)組是不會(huì)執(zhí)行回調(diào)函數(shù)的。

    total:必需。初始值, 或者計(jì)算結(jié)束后的返回值

    currValue:必需。當(dāng)前元素

    currIndex:可選。當(dāng)前元素的索引

    arr :可選。當(dāng)前數(shù)組對(duì)象。

    initValue:可選。累加器初始值

    let newArr = arr.reduce((accu, cur) => {

    return accu.includes(cur) ? accu : accu.concat(cur); // 1. 拼接方法

    // return accu.includes(cur) ? accu : […accu, cur]; // 2. 擴(kuò)展運(yùn)算

    }, []);

    // [1, 2, 4, null, “3”, “abc”, 3, 5]

    6. Array.indexOfindexOf() 方法:返回?cái)?shù)組中某個(gè)指定的元素位置。該方法遍歷數(shù)組,查找有無(wú)對(duì)應(yīng)元素并返回元素第一次出現(xiàn)的索引,未找到指定元素則返回 -1。

    let newArr = []

    for (var i = 0; i < arr.length; i++) {

    if (newArr.indexOf(arr[i]) === -1) newArr.push(arr[i])

    }

    //等同于 forEach 寫(xiě)法

    arr.forEach( item => newArr.indexOf(item) === -1 ? newArr.push(item) : ”)

    console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]

    7. Array.includesincludes() 方法:用來(lái)判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,如果是返回 true,否則false。

    let newArr = []

    for (var i = 0; i < arr.length; i++) {

    if (!newArr.includes(arr[i])) newArr.push(arr[i])

    }

    //等同于 forEach 寫(xiě)法

    arr.forEach( item => !newArr.includes(item) ? newArr.push(item) : ”)

    console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]

    8. new Set + 擴(kuò)展運(yùn)算符 || Array.fromES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。

    Set本身是一個(gè)構(gòu)造函數(shù),可以接受一個(gè)具有 iterable 接口數(shù)據(jù)結(jié)構(gòu)作為參數(shù)(如數(shù)組,字符串),用來(lái)初始化。

    let newArr = […new Set(arr)]; // [1, 2, 4, null, “3”, “abc”, 3, 5]

    let newArr = Array.from(new Set(arr)); // [1, 2, 4, null, “3”, “abc”, 3, 5]

    let newStr = […new Set(‘a(chǎn)babbc’)].join(”) // ‘a(chǎn)bc’

    9. new MapES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Map。類(lèi)似于對(duì)象,也是鍵值對(duì)的集合,但是“鍵”的范圍不限于字符串,各種類(lèi)型的值(包括對(duì)象)都可以當(dāng)作鍵。

    set方法設(shè)置鍵名key對(duì)應(yīng)的鍵值為value,然后返回整個(gè) Map 結(jié)構(gòu)。如果key已經(jīng)有值,則鍵值會(huì)被更新,否則就新生成該鍵。

    get方法讀取key對(duì)應(yīng)的鍵值,如果找不到key,返回undefined。

    has方法返回一個(gè)布爾值,表示某個(gè)鍵是否在當(dāng)前 Map 對(duì)象之中。

    let map = new Map();

    let newStr = [];

    for (let i = 0; i < arr.length; i++) {

    if (!map.has(arr[i])) {

    map.set(arr[i], true);

    newStr.push(arr[i]);

    }

    }

    console.log(newArr) // [1, 2, 4, null, “3”, “abc”, 3, 5]

    文檔

    數(shù)組拆分成多個(gè)數(shù)組

    一般的方法此處也不列舉了,還是有很多的,如雙層循環(huán)判斷是否相等,或新建數(shù)組比較再push等等,需要注意的是,使用splice方法移除元素時(shí),有可能會(huì)導(dǎo)致數(shù)組塌陷問(wèn)題,需要處理一下。本文中介紹了多種數(shù)組去重的方法,使用了較多的高階方法及API,并給出相應(yīng)解釋及語(yǔ)法,還有其他多種組合調(diào)用方式,原理邏輯其實(shí)都差不多,其中for循環(huán)可以與forEach方法相互轉(zhuǎn)換,因此此處便不再一一列舉,大家如果有更好的算法,可以留言給我,虛心請(qǐng)教。給定一個(gè)數(shù)組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復(fù)項(xiàng)。
    推薦度:
    為你推薦
    資訊專(zhuān)欄
    熱門(mén)視頻
    相關(guān)推薦
    小興安嶺是在哪里 小興安嶺在哪個(gè)省 紫荊花寓意與花語(yǔ) 形容綠色的詞語(yǔ)有哪些 蔚字的含義 歷屆舉辦奧運(yùn)會(huì)的國(guó)家 奧運(yùn)會(huì)舉辦國(guó)家有中哪些 接種是什么意思 磚是怎么制作的 炮仗面是什么 前端js把json字符串轉(zhuǎn)json對(duì)象 java對(duì)象轉(zhuǎn)json對(duì)象命令 紅包數(shù)字寓意天天開(kāi)心 檢查婦科需要多少費(fèi)用 做一個(gè)宮頸篩查需要多少錢(qián) 河南十大帥哥明星 河南籍男明星有哪些 最好看的末世小說(shuō)排名 十大必看末世小說(shuō) 虱子的繁殖速度有多快 js數(shù)組移除制定對(duì)象 適合夏天干的小生意 夏天地?cái)傎u(mài)什么最掙錢(qián) 網(wǎng)上不起眼的5個(gè)暴利小生意 在家可以怎么賺錢(qián) 月入2萬(wàn)的5個(gè)小生意 適合擺地?cái)偟纳?/a> 現(xiàn)在做什么生意最冷門(mén) 月入2萬(wàn)的4個(gè)小生意 學(xué)生怎么賺錢(qián)快不用本錢(qián) 4個(gè)投資小收益高的小生意 開(kāi)什么店鋪?zhàn)钯嶅X(qián) 藏在農(nóng)村不起眼的暴利小生意 5個(gè)最受歡迎的暴利小生意 學(xué)校周邊做什么生意最賺錢(qián) 方便面品牌排行榜前十名 全球最具人氣方便面Top10 打雷閃電可以玩手機(jī)嗎 適合女性的7個(gè)暴利小生意 在農(nóng)村一天能賺200元以上的小生意
    Top 亚洲精品~无码抽插| 国产精品李雅在线观看| 狠狠精品久久久无码中文字幕 | 久久青青草原精品影院| 国产69精品久久久久久久| 久久久久无码精品亚洲日韩| 无码日韩精品一区二区人妻| 国产91久久精品一区二区| 久久精品一区二区三区不卡| 四虎成人精品在永久在线观看| 精品9E精品视频在线观看 | 99久久er热在这里只有精品99 | 久久久无码人妻精品无码| 久久狠狠一本精品综合网| 少妇人妻精品一区二区| 4444亚洲国产成人精品| 亚洲精品无码乱码成人| 香蕉99久久国产综合精品宅男自 | 国产精品91在线播放| 久久久无码精品亚洲日韩京东传媒| 久久夜色撩人精品国产小说| 最新国产精品视频| 99久久这里只精品国产免费| 亚洲AV日韩精品久久久久久| 中文字幕精品久久| 国产主播福利精品一区二区| 国产精品无码AV不卡| 精品国产乱码久久久久久呢 | 成人国产精品一区二区网站| 亚洲精品第一综合99久久| 91精品免费观看| 久久精品国产亚洲av麻豆| 中文字幕精品一区二区三区视频| 国产69久久精品成人看| 国产精品自产拍在线网站| 国产精品天天看大片特色视频| 56prom在线精品国产| 欧洲精品久久久av无码电影| 午夜精品乱人伦小说区| 久久精品国产99国产精2020丨 | 四虎影视永久在线观看精品|