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