<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 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产成人精品日本亚洲专一区| 四虎国产精品永久在线看| 国产精品视频你懂的| 亚洲爆乳精品无码一区二区三区| 日本精品视频在线观看| 国产精品青青在线麻豆| 日韩精品一区二区三区老鸦窝| 精品免费久久久久国产一区| 精品久久久久久777米琪桃花| 久久久久久精品免费看SSS | 国产精品免费福利久久| 国产69精品久久久久99| 在线观看国产精品va| 久久久99精品成人片| 69精品免费视频| 久久精品亚洲一区二区| 日韩欧国产精品一区综合无码| 国产大陆亚洲精品国产| 国产精品宾馆在线精品酒店| 精品国产三级a∨在线| 日韩av无码久久精品免费| 亚洲色精品88色婷婷七月丁香| 国产精品高清免费网站| 一区二区三区久久精品| 国产成人精品男人免费| 国产精品爆乳奶水无码视频 | 国产乱人伦偷精精品视频| 久久蜜桃精品一区二区三区| 99国产精品永久免费视频| 日韩精品一区二区三区中文精品| 91大神在线精品网址| 久久国产精品77777| 少妇人妻偷人精品无码视频 | 久久久人妻精品无码一区| 国产精品秘入口福利姬网站| 狠狠综合视频精品播放| 人妻老妇乱子伦精品无码专区| 精品不卡一区中文字幕| 九九精品视频在线播放8| caoporn国产精品免费|