<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    js數組移除制定對象

    文檔

    js數組移除制定對象

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

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

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

    給定一個數組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復項

    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. 利用對象的 key 唯一眾所周知,對象的key不可重復,否則后者將覆蓋前者。利用該特性,實現數組去重,遍歷數組,將數組的每一項做為對象的key值

    let obj = {};

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

    let item = arr[i]

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

    arr.splice(i, 1);

    i–; // 解決刪除元素后,數組塌陷問題

    continue;

    }

    obj[item] = item

    }

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

    2. 交換元素位置從而替換調 splice方法上述方法存在一定的性能問題,也就是說,基于splice實現刪除性能不太好,當前項被刪除后,隨后每一項的索引都要向前移動一位,數據量較龐大時,一定會影響性能。

    基于以上考慮,交換元素的位置,效率會更高一點,若當前元素重復,則與數組最后一位元素交換位置,i–再次進行判斷即可,同時length–,操作數組的長度實現刪除數組的最后一個元素,這樣便不會影響到數組中其他元素

    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() 方法:創建一個新數組,新數組中的元素是指定數組中符合某種條件的所有元素。如果沒有符合條件的元素則返回空數組。

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

    filter() 不會對空數組進行檢測。

    filter() 不會改變原始數組。

    原理:返回 item 第一次出現的位置等于當前的index的元素

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

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

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

    原理:利用對象的鍵名不可重復的特點

    let obj = {}

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

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

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

    reduce() 對于空數組是不會執行回調函數的。

    total:必需。初始值, 或者計算結束后的返回值

    currValue:必需。當前元素

    currIndex:可選。當前元素的索引

    arr :可選。當前數組對象。

    initValue:可選。累加器初始值

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

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

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

    }, []);

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

    6. Array.indexOfindexOf() 方法:返回數組中某個指定的元素位置。該方法遍歷數組,查找有無對應元素并返回元素第一次出現的索引,未找到指定元素則返回 -1。

    let newArr = []

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

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

    }

    //等同于 forEach 寫法

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

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

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

    let newArr = []

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

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

    }

    //等同于 forEach 寫法

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

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

    8. new Set + 擴展運算符 || Array.fromES6 提供了新的數據結構 Set。類似于數組,但是成員的值都是唯一的,沒有重復的值。

    Set本身是一個構造函數,可以接受一個具有 iterable 接口數據結構作為參數(如數組,字符串),用來初始化。

    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(‘ababbc’)].join(”) // ‘abc’

    9. new MapES6 提供了新的數據結構 Map。類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當作鍵。

    set方法設置鍵名key對應的鍵值為value,然后返回整個 Map 結構。如果key已經有值,則鍵值會被更新,否則就新生成該鍵。

    get方法讀取key對應的鍵值,如果找不到key,返回undefined。

    has方法返回一個布爾值,表示某個鍵是否在當前 Map 對象之中。

    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]

    文檔

    js數組移除制定對象

    一般的方法此處也不列舉了,還是有很多的,如雙層循環判斷是否相等,或新建數組比較再push等等,需要注意的是,使用splice方法移除元素時,有可能會導致數組塌陷問題,需要處理一下。本文中介紹了多種數組去重的方法,使用了較多的高階方法及API,并給出相應解釋及語法,還有其他多種組合調用方式,原理邏輯其實都差不多,其中for循環可以與forEach方法相互轉換,因此此處便不再一一列舉,大家如果有更好的算法,可以留言給我,虛心請教。給定一個數組 [1,2,2,4,null,null,’3′,’abc’,3,5,4,1,2,2,4,null,null,’3′,’abc’,3,5,4] 去除重復項。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    數組拆分成多個數組 小興安嶺是在哪里 小興安嶺在哪個省 紫荊花寓意與花語 形容綠色的詞語有哪些 蔚字的含義 歷屆舉辦奧運會的國家 奧運會舉辦國家有中哪些 接種是什么意思 磚是怎么制作的 炮仗面是什么 前端js把json字符串轉json對象 java對象轉json對象命令 紅包數字寓意天天開心 檢查婦科需要多少費用 做一個宮頸篩查需要多少錢 河南十大帥哥明星 河南籍男明星有哪些 最好看的末世小說排名 十大必看末世小說 適合夏天干的小生意 夏天地攤賣什么最掙錢 網上不起眼的5個暴利小生意 在家可以怎么賺錢 月入2萬的5個小生意 適合擺地攤的生意 現在做什么生意最冷門 月入2萬的4個小生意 學生怎么賺錢快不用本錢 4個投資小收益高的小生意 開什么店鋪最賺錢 藏在農村不起眼的暴利小生意 5個最受歡迎的暴利小生意 學校周邊做什么生意最賺錢 方便面品牌排行榜前十名 全球最具人氣方便面Top10 打雷閃電可以玩手機嗎 適合女性的7個暴利小生意 在農村一天能賺200元以上的小生意 4個投資小回報高的暴利小生意
    Top 亚洲精品免费观看| 国产大片91精品免费看3| 亚洲精品高清无码视频| 国产成人综合日韩精品无码| 国产成人精品免费午夜app| 亚洲精品高清无码视频| 亚洲精品无码成人片在线观看| 1000部精品久久久久久久久| 无码精品久久久天天影视| 日韩精品无码免费专区网站| www国产亚洲精品久久久日本| 久久久久久久精品毛万迈巴赫车标 | 1313午夜精品理论片| 久久久久久久精品妇女99| 亚洲国产精品无码久久久不卡| 丰满人妻熟妇乱又伦精品软件| 国产精品国产AV片国产| 精品福利视频网站| 亚洲精品91在线| 99热成人精品国产免国语的| 久久精品国产精品亚洲精品| 99精品在线观看| 国产伦精品一区二区三区视频猫咪 | 久久66热这里只会有精品| 国产综合精品一区二区三区| 精品久久久久久久久久中文字幕| 国产精品久久久久影院| 日韩人妻高清精品专区| 国语精品91自产拍在线观看二区| 国产精品中文字幕在线观看| 精品福利一区二区三区免费视频| 久久亚洲精品中文字幕无码| 国内精品51视频在线观看 | 国产成人精品高清在线观看96| 国产精品1区2区3区在线播放| 337p日本欧洲亚洲大胆精品555588| 久久久久国产精品免费免费不卡| 久久99精品久久久久久首页| 久久国产精品99久久小说| 久久精品视频免费看| 久久精品女人毛片国产|