摘要:數(shù)組去重是校招面試的必考知識(shí)點(diǎn)。以下就是筆者所實(shí)現(xiàn)的數(shù)組去重的幾種簡(jiǎn)單的方式。結(jié)合實(shí)現(xiàn)這種方法的關(guān)鍵點(diǎn)就是判斷是否相同的時(shí)候不要忽略對(duì)元素類型的判斷。以上就是筆者所想到的幾個(gè)數(shù)組去重的方式大家如果有更好的方法歡迎留言。
數(shù)組去重,是校招面試的必考知識(shí)點(diǎn)。簡(jiǎn)單的說(shuō),數(shù)組去重就是將一個(gè)數(shù)組中的相同的元素刪除,只保留其中的一個(gè)。這里的相同其實(shí)是一個(gè)陷阱,有好多同學(xué)只認(rèn)為值相等即為相同,而忽略類類型的判斷。所以大家在進(jìn)行數(shù)組去重的時(shí)候,一定要考慮周全。以下,就是筆者所實(shí)現(xiàn)的數(shù)組去重的幾種簡(jiǎn)單的方式。
1、Set實(shí)現(xiàn)第一種方法就是使用es6新增的Array.from()和new Set()。如果現(xiàn)在你還不了解es6,那你可真是out了。建議閱讀ECMAScript 6 入門或者learn-es2015。
Array.prototype.unique = function() { return Array.from(new Set(this)); }2、結(jié)合{}實(shí)現(xiàn)
這種方法的關(guān)鍵點(diǎn)就是:判斷是否相同的時(shí)候,不要忽略對(duì)元素類型的判斷。
Array.prototype.unique = function() { var json = {}; var result = []; this.forEach(function(value){ var type = Object.prototype.toString.call(value).match(/s(w+)/)[1].toLowerCase(); if(!((type + "-"+value) in json)){ json[type + "-"+value] = true; result.push(value); } }) return result; }3、利用Array.prototype.filter實(shí)現(xiàn)
filter是es5中新增的數(shù)組的一個(gè)方法。不了解的同請(qǐng)閱讀Array.prototype.filter()
Array.prototype.unique = function() { var sortArr = this.sort(); return sortArr.filter(function(v,i,context){ return v !== context[i+1]; }) }4、利用Array.prototype.forEach實(shí)現(xiàn)
includes也是es6新增的方法。不了解的同請(qǐng)閱讀Array.prototype.includes()
Array.prototype.unique = function() { var result = []; this.forEach(function(v){ if(!result.includes(v)){ result.push(v); } }) return result; }5、利用Array.prototype.splice()實(shí)現(xiàn)
這個(gè)方法是一個(gè)很常規(guī)的方法,關(guān)鍵點(diǎn)就是在splice一個(gè)元素之后,i要自減1。
Array.prototype.unique = function() { var sortArr = this.sort(), i = 0; for(; i < sortArr.length; i++){ if(sortArr[i] === sortArr[i+1]){ sortArr.splice(i,1); i--; } } return sortArr; }6、利用Array.prototype.reduce()實(shí)現(xiàn)
reduce是es5中新增的數(shù)組的一個(gè)方法。不了解的同學(xué)請(qǐng)閱讀Array.prototype.reduce()。
Array.prototype.unique = function() { var sortArr = this.sort(), result = []; sortArr.reduce((v1,v2) => { if(v1 !== v2){ result.push(v1); } return v2; }) result.push(sortArr[sortArr.length - 1]); return result; }
以上就是筆者所想到的幾個(gè)數(shù)組去重的方式,大家如果有更好的方法,歡迎留言。也可以去我的github的倉(cāng)庫(kù)snippetspr,這個(gè)倉(cāng)庫(kù)主要用于前端代碼片段的搜集,歡迎大家踴躍貢獻(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88067.html
摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...
摘要:封裝手寫的方筆記使用檢測(cè)文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡(jiǎn)介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測(cè)試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...
摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊?,否則只會(huì)讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識(shí)只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:在上家公司裸辭之后,經(jīng)過(guò)一段時(shí)間休整,月中下旬面試了一些公司,由于本人框架使用的是,所以面試題涉及到框架的都是,現(xiàn)將面試題整理一下列舉常用的特性。事件冒泡以及事件捕獲。其他前端分頁(yè)和后端分頁(yè)優(yōu)缺點(diǎn)。包含多個(gè)子節(jié)點(diǎn)及孫節(jié)點(diǎn),遍歷。 在上家公司裸辭之后,經(jīng)過(guò)一段時(shí)間休整,5月中下旬面試了一些公司,由于本人框架使用的是vue,所以面試題涉及到框架的都是vue,現(xiàn)將面試題整理一下: es6 ...
摘要:在上家公司裸辭之后,經(jīng)過(guò)一段時(shí)間休整,月中下旬面試了一些公司,由于本人框架使用的是,所以面試題涉及到框架的都是,現(xiàn)將面試題整理一下列舉常用的特性。事件冒泡以及事件捕獲。其他前端分頁(yè)和后端分頁(yè)優(yōu)缺點(diǎn)。包含多個(gè)子節(jié)點(diǎn)及孫節(jié)點(diǎn),遍歷。 在上家公司裸辭之后,經(jīng)過(guò)一段時(shí)間休整,5月中下旬面試了一些公司,由于本人框架使用的是vue,所以面試題涉及到框架的都是vue,現(xiàn)將面試題整理一下: es6 ...
閱讀 1230·2021-11-22 12:05
閱讀 1366·2021-09-29 09:35
閱讀 656·2019-08-30 15:55
閱讀 3155·2019-08-30 14:12
閱讀 978·2019-08-30 14:11
閱讀 2905·2019-08-30 13:10
閱讀 2435·2019-08-29 16:33
閱讀 3357·2019-08-29 11:02