最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)組去重的15種方法總結(jié)

 更新時(shí)間:2025年05月06日 11:13:00   作者:胖方Hale  
這篇文章主要介紹了JavaScript數(shù)組去重的15種方法,包括利用ES6 Set、filter、reduce、Map對(duì)象、sort等,適合在面試中展示,需要的朋友可以參考下

前言

數(shù)組去重,一般都是在面試的時(shí)候才會(huì)碰到,一般是要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的 10 種,面試官很有可能對(duì)你刮目相看。一般工作只需要記住使用 SET 和遞歸就夠用了。

在真實(shí)的項(xiàng)目中碰到的數(shù)組去重,一般都是后臺(tái)去處理,很少讓前端處理數(shù)組去重。雖然日常項(xiàng)目用到的概率比較低,但還是需要了解一下,以防面試的時(shí)候可能回被問到。

能力有限,但還是盡力想去做到最好。如果文檔內(nèi)容對(duì)你有一點(diǎn)幫助,請(qǐng)幫忙點(diǎn)一個(gè)免費(fèi)的贊和關(guān)注??‍??‍??‍,這樣我就能得到更多分享的機(jī)會(huì),多多給大家分享。萬分感謝

1. 利用 ES6 SET 去重(最常用)

// 數(shù)組去重
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 方法一:使用Set對(duì)象
const uniqueArr1 = function(arr) {
  return Array.from(new Set(arr));
};
console.log(uniqueArr1(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

優(yōu)勢(shì):簡(jiǎn)單,方便,代碼最少,容易理解。

缺點(diǎn):無法去掉 {} 空對(duì)象。

2. 使用 fliter 方法

// 方法二:使用filter方法
const uniqueArr2 = function(arr) {
  return arr.filter((item, index, self) => self.indexOf(item) === index);
};
console.log(uniqueArr2(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

3. 使用 reduce 方法

// 方法三:使用reduce方法
const uniqueArr3 = function(arr) {
  return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
};

4. 使用 Map 對(duì)象

// 方法四:使用Map對(duì)象
const uniqueArr4 = function(arr) {
  const map = new Map();
  return arr.filter((item) => !map.has(item) && map.set(item, 1));
};
console.log(uniqueArr4(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

5. 使用 sort 方法

// 方法五:使用sort方法
const uniqueArr5 = function(arr) {
  return arr.sort().filter((item, index, self) => item !== self[index - 1]);
};

6. 使用 includes 方法

// 方法六:使用includes方法
const uniqueArr6 = function(arr) {
  const res = [];
  for (let i = 0; i < arr.length; i++) {
    if (!res.includes(arr[i])) {
      res.push(arr[i]);
    }
  }
  return res;
};
console.log(uniqueArr6(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

7. 使用 indexof() 方法

// 方法七:使用indexOf方法
const uniqueArr7 = function(arr) {
  const res = [];
  for (let i = 0; i < arr.length; i++) {
    if (res.indexOf(arr[i]) === -1) {
      res.push(arr[i]);
    }
  }
  return res;
};
console.log(uniqueArr7(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

8. 使用 for …of 循環(huán)

// 方法八:使用for...of循環(huán)
const uniqueArr8 = function(arr) {
  const res = [];
  for (const item of arr) {
    if (!res.includes(item)) {
      res.push(item);
    }
  }
  return res;
};
console.log(uniqueArr8(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

9. 使用 for…in 循環(huán)

// 方法九:使用for...in循環(huán)
const uniqueArr9 = function(arr) {
  const res = [];
  for (const item in arr) {
    if (!res.includes(arr[item])) {
      res.push(arr[item]);
    }
  }
  return res;
};
console.log(uniqueArr9(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

10. 使用 white 循環(huán)

// 方法十:使用while循環(huán)
const uniqueArr10 = function(arr) {
  const res = [];
  let i = 0;
  while (i < arr.length) {
    if (!res.includes(arr[i])) {
      res.push(arr[i]);
    }
    i++;
  }
  return res;
};
console.log(uniqueArr10(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

11. 使用 do…while 循環(huán)

// 方法十一:使用do...while循環(huán)
const uniqueArr11 = function(arr) {
  const res = [];
  let i = 0;
  do {
    if (!res.includes(arr[i])) {
      res.push(arr[i]);
    }
    i++;
  } while (i < arr.length);
  return res;
};
console.log(uniqueArr11(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

12. 使用 forEach 方法

// 方法十二:使用forEach方法
const uniqueArr12 = function(arr) {
  const res = [];
  arr.forEach((item) => {
    if (!res.includes(item)) {
      res.push(item);
    }
  });
  return res;
};
console.log(uniqueArr12(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

13. 使用 map 方法

// 方法十三:使用map方法
const uniqueArr13 = function(arr) {
  const res = [];
  arr.map((item) => {
    if (!res.includes(item)) {
      res.push(item);
    }
  })
}
console.log(uniqueArr13(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

14. 利用遞歸去重

// 方法十四:利用遞歸去重
const uniqueArr14 = function(arr) {
  const res = arr;
  const len = res.length;
  for (let i = 0; i < len; i++) {
    for (let j = i + 1; j < len; j++) {
      if (res[i] === res[j]) {
        res.splice(j, 1);
        len--;
      }
    }
  }
}
console.log(uniqueArr14(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

總結(jié) 

到此這篇關(guān)于JavaScript數(shù)組去重的15種方法的文章就介紹到這了,更多相關(guān)JS數(shù)組去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Cookie的生命周期問題

    淺談Cookie的生命周期問題

    下面小編就為大家?guī)硪黄獪\談Cookie的生命周期問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • Immutable 在 JavaScript 中的應(yīng)用

    Immutable 在 JavaScript 中的應(yīng)用

    在 JavaScript 中,對(duì)象是引用類型的數(shù)據(jù),其優(yōu)點(diǎn)在于頻繁的修改對(duì)象時(shí)都是在原對(duì)象的基礎(chǔ)上修改,并不需要重新創(chuàng)建,這樣可以有效的利用內(nèi)存,不會(huì)造成內(nèi)存空間的浪費(fèi),對(duì)象的這種特性可以稱之為 Mutable,中文的字面意思是「可變」
    2016-05-05
  • 用webpack4開發(fā)小程序的實(shí)現(xiàn)方法

    用webpack4開發(fā)小程序的實(shí)現(xiàn)方法

    這篇文章主要介紹了用webpack4開發(fā)小程序的實(shí)現(xiàn)方法,分享通過webpack來構(gòu)建小程序的開發(fā)架構(gòu),感興趣的小伙伴們可以參考一下
    2019-06-06
  • Vue項(xiàng)目中關(guān)于全局css的處理

    Vue項(xiàng)目中關(guān)于全局css的處理

    我們?cè)趯慍SS的時(shí)候,會(huì)遇到大量相同的屬性(比如:margin-top:10px)這種屬性幾乎每個(gè)vue頁面都有。這個(gè)時(shí)候,我們可以把css掛載到全局上,供所有vue頁面使用,同時(shí)也方便修改。感興趣的同學(xué)可以參考一下
    2023-04-04
  • 利用JS屏蔽頁面中的Enter按鍵提交表單的方法

    利用JS屏蔽頁面中的Enter按鍵提交表單的方法

    下面小編就為大家?guī)硪黄肑S屏蔽頁面中的Enter按鍵提交表單的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • js簡(jiǎn)單實(shí)現(xiàn)點(diǎn)擊左右運(yùn)動(dòng)的方法

    js簡(jiǎn)單實(shí)現(xiàn)點(diǎn)擊左右運(yùn)動(dòng)的方法

    這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)點(diǎn)擊左右運(yùn)動(dòng)的方法,實(shí)例分析了javascript實(shí)現(xiàn)左右運(yùn)動(dòng)的相關(guān)要點(diǎn)與技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 可拖拽組件slider.js使用方法詳解

    可拖拽組件slider.js使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了可拖拽組件slider.js的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • BootStrapValidator校驗(yàn)方式

    BootStrapValidator校驗(yàn)方式

    做輸入校驗(yàn)的時(shí)候如果你前端框架用的是bootstrap的話,首推bootstrapValidator校驗(yàn)方式,下面通過本文給大家分享下校驗(yàn)流程,一起看看吧
    2016-12-12
  • 微信小程序點(diǎn)擊圖片實(shí)現(xiàn)長按預(yù)覽、保存、識(shí)別帶參數(shù)二維碼、轉(zhuǎn)發(fā)等功能

    微信小程序點(diǎn)擊圖片實(shí)現(xiàn)長按預(yù)覽、保存、識(shí)別帶參數(shù)二維碼、轉(zhuǎn)發(fā)等功能

    這篇文章主要介紹了微信小程序點(diǎn)擊圖片實(shí)現(xiàn)長按預(yù)覽、保存、識(shí)別帶參數(shù)二維碼、轉(zhuǎn)發(fā)等功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • HTA版JSMin(省略修飾語若干)基于javascript語言編寫

    HTA版JSMin(省略修飾語若干)基于javascript語言編寫

    JSMin是一種很有用的ECMAScript代碼減肥工具,雖然它只是一種較為初級(jí)的工具,但用它來對(duì)付我自己編寫的大部分ECMAScript代碼效果都很不錯(cuò),而且在我這里也從未發(fā)生過減肥后代碼出錯(cuò)之類的問題。
    2009-12-12

最新評(píng)論

龙口市| 永康市| 休宁县| 布拖县| 安仁县| 商都县| 陵水| 会宁县| 鹤岗市| 宁夏| 珲春市| 普陀区| 和硕县| 江川县| 阳东县| 柳河县| 黄龙县| 息烽县| 桐乡市| 巴青县| 韶关市| 隆化县| 澄江县| 灵石县| 湘阴县| 金平| 汝南县| 西城区| 尤溪县| 香港| 白城市| 五华县| 金平| 仙游县| 日土县| 万荣县| 江阴市| 开封县| 龙山县| 大厂| 崇礼县|