JavaScript常用8種數(shù)組去重代碼實(shí)例
在我們學(xué)習(xí)和使用JavaScript的中,會(huì)經(jīng)常使用到數(shù)組的去重,接下來(lái)的內(nèi)容,來(lái)給大家分享一下,我們?cè)陂_發(fā)過(guò)程中,常用到的數(shù)組去重方法,這些方法都是有在實(shí)戰(zhàn)中真實(shí)實(shí)踐過(guò)的,非常值得大家學(xué)習(xí)和收藏,我們一起來(lái)看看都有哪些方法吧!
1.利用對(duì)象的屬性
使用對(duì)象屬性不重名的特性。
var arr = ['qiang','ming','tao','li','liang','you','qiang','tao']; console.time("nonredundant1"); var nonredundant1 = Object.getOwnPropertyNames(arr.reduce(function(seed, item, index) { seed[item] = index; return seed; },{})); console.timeEnd("nonredundant1"); console.log(nonredundant1);
結(jié)果如下:
2. 使用Set數(shù)據(jù)結(jié)構(gòu)
set是一種類似數(shù)組的結(jié)構(gòu),但是set成員中沒(méi)有重復(fù)的值。set()函數(shù)可以接受一個(gè)數(shù)組或者類數(shù)組的參數(shù),生成一個(gè)set對(duì)象。而Array.from方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-like object和可遍歷iterable)的對(duì)象包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map)。
var arr = ['qiang','ming','tao','li','liang','you','qiang','tao']; function unique (arr) { return Array.from(new Set(arr)) } console.time("nonredundant2"); var nonredundant2 = unique(arr); console.timeEnd("nonredundant2"); console.log(nonredundant2);
結(jié)果如下:
3. 使用for循環(huán)和splice
function unique(arr) { for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { //第一個(gè)等同于第二個(gè),splice方法刪除第二個(gè) arr.splice(j, 1); j--; } } } return arr; } console.time("nonredundant3"); var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; var nonredundant3 = unique(arr); console.timeEnd("nonredundant3"); console.log(nonredundant3);
結(jié)果如下:
4.使用indexOf判斷去重
function unique(arr) { var array = []; for (var i = 0; i < arr.length; i++) { if (array .indexOf(arr[i]) === -1) { array .push(arr[i]) } } return array; } var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; console.time("nonredundant4"); var nonredundant4 = unique(arr); console.timeEnd("nonredundant4"); console.log(nonredundant4);
結(jié)果如下:
5.使用sort排序去重
function unique(arr) { arr = arr.sort() var arrry = [arr[0]]; for (var i = 1; i < arr.length; i++) { if (arr[i] !== arr[i - 1]) { arrry.push(arr[i]); } } return arrry; } var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; console.time("nonredundant5"); var nonredundant5 = unique(arr); console.timeEnd("nonredundant5");
結(jié)果如下:
6.使用filter
function unique(arr) { var obj = {}; return arr.filter(function(item, index, arr){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) }) } var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; console.time("nonredundant6"); var nonredundant6 = unique(arr); console.timeEnd("nonredundant6"); console.log(nonredundant6);
結(jié)果如下:
7.使用Map數(shù)據(jù)結(jié)構(gòu)去重
function unique(arr) { let map = new Map(); let array = new Array(); // 數(shù)組用于返回結(jié)果 for (let i = 0; i < arr.length; i++) { if (map.has(arr[i])) { // 如果有該key值 map.set(arr[i], true); } else { map.set(arr[i], false); // 如果沒(méi)有該key值 array.push(arr[i]); } } return array; } var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; console.time("nonredundant7"); var nonredundant7 = unique(arr); console.timeEnd("nonredundant7"); console.log(nonredundant7);
結(jié)果如下:
8.使用reduce和include去重
function unique(arr){ return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]); } var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao']; console.time("nonredundant8"); var nonredundant8 = unique(arr); console.timeEnd("nonredundant8"); console.log(nonredundant8);
結(jié)果如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS數(shù)組去重的九種高階方法(親測(cè)有效)
- js操作兩個(gè)json數(shù)組合并、去重,以及刪除某一項(xiàng)元素
- 關(guān)于JavaScript數(shù)組去重的一些理解匯總
- JS數(shù)組中對(duì)象去重操作示例
- JS學(xué)習(xí)筆記之?dāng)?shù)組去重實(shí)現(xiàn)方法小結(jié)
- JavaScript數(shù)組去重的幾種方法
- javascript數(shù)組去重方法總結(jié)(推薦)
- JavaScript數(shù)組去重的方法總結(jié)【12種方法,號(hào)稱史上最全】
- JS基于開關(guān)思想實(shí)現(xiàn)的數(shù)組去重功能【案例】
- js數(shù)組去重的11種方法
相關(guān)文章
小程序的基本使用知識(shí)點(diǎn)(非常全面,推薦!)
開發(fā)一個(gè)小程序在如今來(lái)講是較為簡(jiǎn)單的,但其實(shí)還是有很多的知識(shí)點(diǎn)需要大家記住,這篇文章主要給大家介紹了關(guān)于微信小程序基本使用的相關(guān)資料,需要的朋友可以參考下2021-06-06Layui 導(dǎo)航默認(rèn)展開和菜單欄選中高亮設(shè)置的方法
今天小編就為大家分享一篇Layui 導(dǎo)航默認(rèn)展開和菜單欄選中高亮設(shè)置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09vue2.x的深入學(xué)習(xí)--關(guān)于h函數(shù)的說(shuō)明
下面小編就為大家分享一篇基于h函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-08-08學(xué)習(xí)javascript面向?qū)ο?理解javascript對(duì)象
這篇文章主要介紹了javascript對(duì)象,學(xué)習(xí)javascript面向?qū)ο螅信d趣的小伙伴們可以參考一下2016-01-01基于jquery的高性能td和input切換并可修改內(nèi)容實(shí)現(xiàn)代碼
在實(shí)際工作中,我們會(huì)碰到這樣一個(gè)情況。在頁(yè)面中顯示著100個(gè)數(shù)據(jù),同時(shí)用戶還希望他可以更改其中的數(shù)據(jù),普通的方式可能如下2011-01-01一文詳解requestAnimationFrame請(qǐng)求動(dòng)畫幀
requestAnimationFrame是一個(gè)用于動(dòng)畫效果的 API,它使用瀏覽器的刷新率來(lái)執(zhí)行回調(diào)函數(shù),通常每秒鐘執(zhí)行60次,這篇文章主要給大家介紹了關(guān)于requestAnimationFrame請(qǐng)求動(dòng)畫幀的相關(guān)資料,需要的朋友可以參考下2023-12-12JS判斷數(shù)組中是否有重復(fù)值得三種實(shí)用方法
數(shù)組中是否有重復(fù)值的判斷方法有很多,本文為大家推薦下比較實(shí)用的3種方法,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08關(guān)于取不到由location.href提交而來(lái)的上級(jí)頁(yè)面地址的解決辦法
驗(yàn)證上級(jí)頁(yè)面來(lái)源取不到由location.href提交而來(lái)的頁(yè)面地址,搜索了一大堆沒(méi)有合適的解決辦法,突然想到通過(guò)模擬JS點(diǎn)擊鏈接的方法2009-07-07