數組去重,是校招面試的必考知識點。簡單的說,數組去重就是將一個數組中的相同的元素刪除,只保留其中的一個。這裏的相同實際上是一個陷阱,有好多同窗只認爲值相等即爲相同,而忽略類類型的判斷。因此你們在進行數組去重的時候,必定要考慮周全。如下,就是筆者所實現的數組去重的幾種簡單的方式。前端
Set
實現第一種方法就是使用es6
新增的Array.from()
和new Set()
。若是如今你還不瞭解es6
,那你可真是out了。建議閱讀ECMAScript 6 入門或者learn-es2015。git
Array.prototype.unique = function() { return Array.from(new Set(this)); }
{}
實現這種方法的關鍵點就是:判斷是否相同的時候,不要忽略對元素類型的判斷。es6
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; }
Array.prototype.filter
實現filter
是es5中新增的數組的一個方法。不瞭解的同請閱讀Array.prototype.filter()github
Array.prototype.unique = function() { var sortArr = this.sort(); return sortArr.filter(function(v,i,context){ return v !== context[i+1]; }) }
Array.prototype.forEach
實現includes
也是es6
新增的方法。不瞭解的同請閱讀Array.prototype.includes()面試
Array.prototype.unique = function() { var result = []; this.forEach(function(v){ if(!result.includes(v)){ result.push(v); } }) return result; }
Array.prototype.splice()
實現這個方法是一個很常規的方法,關鍵點就是在splice
一個元素以後,i
要自減1。json
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; }
Array.prototype.reduce()
實現reduce
是es5中新增的數組的一個方法。不瞭解的同窗請閱讀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; }
以上就是筆者所想到的幾個數組去重的方式,你們若是有更好的方法,歡迎留言。也能夠去個人github
的倉庫snippetspr
,這個倉庫主要用於前端代碼片斷的蒐集,歡迎你們踊躍貢獻。babel