欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中數(shù)組去重的5種方法

 更新時(shí)間:2020年07月04日 09:10:27   作者:老甄Home  
這篇文章主要介紹了JavaScript中數(shù)組去重的5種方法,文中講解非常詳細(xì),實(shí)例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

正常情況下,數(shù)據(jù)去重的工作一般都是由后端同事來(lái)完成的,但是前端也要掌握好處理數(shù)據(jù)的能力,萬(wàn)一去重的工作交給我們大前端處理,我們也不能慫呀?,F(xiàn)在我總結(jié)了一些去重的方法,希望對(duì)大家有點(diǎn)幫助。

方法一:new Set()實(shí)現(xiàn)數(shù)組去重

ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set,它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。 Set 本身是一個(gè)構(gòu)造函數(shù),用來(lái)生成 Set 數(shù)據(jù)結(jié)構(gòu)。Set函數(shù)可以接受一個(gè)數(shù)組,用于初始化。根據(jù) Set的數(shù)據(jù)特性,我們可以實(shí)現(xiàn)數(shù)組去重。

let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
let list1 = Array.from(new Set(list)); // [ 1, "a", true, false, null, "", undefined ]
let list2 = [...new Set(list)]; // [ 1, "a", true, false, null, "", undefined ]

方法二:some()+循環(huán)去重

some() 方法用于檢測(cè)數(shù)組中的元素是否滿足指定條件(函數(shù)提供) 。 如果有一個(gè)元素滿足條件,則表達(dá)式返回true , 剩余的元素不會(huì)再執(zhí)行檢測(cè)。 如果沒(méi)有滿足條件的元素,則返回false。 我們可以定義一個(gè)新數(shù)組來(lái)承接沒(méi)有重復(fù)的數(shù)據(jù),遍歷原始數(shù)組的時(shí)候,用新數(shù)組來(lái)判斷數(shù)據(jù)是否已經(jīng)出現(xiàn)過(guò)。

 function distinct(list) {
   let result = [list[0]];// 用于承接沒(méi)有重復(fù)的數(shù)據(jù),初始時(shí)將原始數(shù)組的第一個(gè)值賦給它。
   for (let i = 1; i < list.length; i++) {
     // 判斷結(jié)果數(shù)組中是否存在一樣的值,若果沒(méi)有的話則將數(shù)據(jù)存入結(jié)果數(shù)組中。
     if (!(result.some(val => list[i] === val))) {
       result.push(list[i]);
     }
   }
   return result;
 }
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct(arr); // [ 1, "a", true, false, null, "", undefined ]

方法三:雙重for循環(huán)去重

雙重for循環(huán),第一層循環(huán)確保數(shù)組中的每一項(xiàng)都能被比較,第二層循環(huán)確保被比較項(xiàng)后的每一項(xiàng)都能跟被比較項(xiàng)比較。

function distinct2(list) {
  for (let i = 0; i < list.length; i++) {
    for (let j = i + 1; j < list.length; j++) {
      // 后面數(shù)據(jù)的若跟前一項(xiàng)數(shù)據(jù)相同,則重復(fù),需要去除。
      if (list[i] === list[j]) {
        list.splice(j, 1); // 去除后面的相同項(xiàng)
        j--;
      }
    }
  }
  return list;
}
let arr = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
distinct2(arr); // [ 1, "a", true, false, null, "", undefined ]

方法四:hasOwnProperty()方法去重

hasOwnProperty() 方法用來(lái)檢測(cè)一個(gè)屬性是否是對(duì)象的自有屬性,而不是從原型鏈繼承的。如果該屬性是自有屬性,那么返回 true,否則返回 false。

function unique(arr) {
 var obj = {}; // 用來(lái)記錄數(shù)組中的數(shù)據(jù)
 return arr.filter(function(item, index, arr){
   // 如果記錄對(duì)象中存在某個(gè)數(shù)據(jù),則返回false過(guò)濾掉;否則obj進(jìn)行記錄并篩選出來(lái)
   return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
 })
}
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
unique(arr) // [ 1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, 'a', {}]

方法五:利用filter()+indexOf()方法去重

indexOf() 方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置。

function unique(arr) {
 return arr.filter(function(item, index, arr) {
  // 從數(shù)組0位開(kāi)始查,如果當(dāng)前元素在原始數(shù)組中的第一個(gè)索引==當(dāng)前索引值,說(shuō)明它是第一次出現(xiàn)。
  return arr.indexOf(item, 0) === index;
 });
}
let list = [1, 1, 'a', 'a', true, true, false, false, null, '', null, '', undefined, undefined];
unique(list); // [ 1, "a", true, false, null, "", undefined ]

此外,數(shù)組去重還可以利用filter()、includes()等方法實(shí)現(xiàn),但是思路都跟上面幾種方法類(lèi)似,這里就不一一列舉了。

以上就是JavaScript中數(shù)組去重的5種方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript中數(shù)組去重的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • ?javascript數(shù)組中的findIndex方法?

    ?javascript數(shù)組中的findIndex方法?

    這篇文章主要介紹了javascript數(shù)組中的findIndex方法,findIndex()?方法返回傳入一個(gè)測(cè)試條件函數(shù)符合條件的數(shù)組第一個(gè)元素位置,下面更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法

    javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法

    這篇文章主要介紹了javascript無(wú)刷新評(píng)論實(shí)現(xiàn)方法,涉及javascript動(dòng)態(tài)添加表格元素的技巧,需要的朋友可以參考下
    2015-05-05
  • JS實(shí)現(xiàn)面包屑導(dǎo)航功能從零開(kāi)始示例

    JS實(shí)現(xiàn)面包屑導(dǎo)航功能從零開(kāi)始示例

    這篇文章主要為大家介紹了JS實(shí)現(xiàn)面包屑導(dǎo)航功能從零開(kāi)始示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • js 利用className得到對(duì)象的實(shí)現(xiàn)代碼

    js 利用className得到對(duì)象的實(shí)現(xiàn)代碼

    利用className得到對(duì)象的實(shí)現(xiàn)代碼,大家可以看下代碼的實(shí)現(xiàn)原理。
    2011-11-11
  • 實(shí)現(xiàn)只能輸入數(shù)字的input不用replace方法

    實(shí)現(xiàn)只能輸入數(shù)字的input不用replace方法

    只能輸入數(shù)字在以往都是使用replace方法實(shí)現(xiàn)的,在本文你將學(xué)習(xí)到不使用它依然可以實(shí)現(xiàn),具體代碼如下,感興趣的朋友可以參考下
    2013-09-09
  • js中函數(shù)聲明與函數(shù)表達(dá)式

    js中函數(shù)聲明與函數(shù)表達(dá)式

    js的解析器對(duì)函數(shù)聲明與函數(shù)表達(dá)式并不是一視同仁地對(duì)待的。對(duì)于函數(shù)聲明,js解析器會(huì)優(yōu)先讀取,確保在所有代碼執(zhí)行之前聲明已經(jīng)被解析,而函數(shù)表達(dá)式,如同定義其它基本類(lèi)型的變量一樣,只在執(zhí)行到某一句時(shí)也會(huì)對(duì)其進(jìn)行解析,
    2015-06-06
  • JavaScript常用工具方法封裝

    JavaScript常用工具方法封裝

    今天小編就為大家分享一篇關(guān)于JavaScript常用工具方法封裝,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • JS異步編程之generator與async/await語(yǔ)法糖詳解

    JS異步編程之generator與async/await語(yǔ)法糖詳解

    這篇文章主要為大家詳細(xì)介紹了JS異步編程中g(shù)enerator與async/await語(yǔ)法糖的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • JavaScript CollectGarbage函數(shù)案例詳解

    JavaScript CollectGarbage函數(shù)案例詳解

    這篇文章主要介紹了JavaScript CollectGarbage函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于ts的動(dòng)態(tài)接口數(shù)據(jù)配置的詳解

    基于ts的動(dòng)態(tài)接口數(shù)據(jù)配置的詳解

    這篇文章主要介紹了基于ts的動(dòng)態(tài)接口數(shù)據(jù)配置的詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論