有時候我們做項目的時候往往會需要把數組里面一些重復的項去掉,但是原生JS有排序,有篩選等等,但是就是沒有數組去重怎么辦呢?
這能怎么辦,自己手動實現嘛。(以下代碼直接在原型上添加的的方法,為的就是和原生JS方法類似)可以達到Array.xxx()這樣的效果
第一種方法:創建空數組利用indexOf方法檢測就數組的項是否在新數組中。
Array.prototype.unique=function(){ var arr=[];//創建新數組 for(var i=0;i<this.length;i++){ //遍歷當前數組 if(arr.indexOf(this[i])===-1){//如果等於-1,那么也是就是新數組中沒有一項和當前數組一樣 arr.push(this[i]) } } return arr; }
//調用:ary.unique()
第二種方法:創建空數組和空對象,判斷數組是否在對象中
Array.prototype.unique=function(){ var tmp={},arr=[] for(var i=0;i<this.length;i++){ if(!tmp[this[i]]){//如果tmp中沒有this[i] tmp[this[i]]=true;//存入 arr.push(this[i]);//添加到新數組中 } } return arr } //調用:ary.unique()
第三種方法:下標判斷法
Array.prototype.unique=function(){ var arr=[this[0]]; for(var i=1;i<this.length;i++){ //遍歷當前數組,從第二項開始遍歷 if(this.indexOf(this[i])===i){//如果當前數組的第i項是i那么就存入新的數組 arr.push(this[i]) } } return arr; } //調用:ary.unique()
第四種方法:排序后在去重
Array.prototype.unique=function(){ var arr=[]; this.sort() for(var i=0;i<this.length;i++){ if(this[i]!==arr[arr.length-1]){ arr.push(this[i]) } } return arr; } //調用:ary.unique()
第五種方法:黑科技new Set數組去重
首先我們先介紹下new Set
new Set是來自於ES6,Set對象是值的集合,你可以按照插入的順序迭代它的元素。 Set中的元素只會出現一次,即 Set 中的元素是唯一的。
大家可以去看下MDN文檔鏈接地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
下面給出代碼!
[...new Set([1,1,2,2,3,3])];//[1,2,3]
代碼就這一句,利用的是Set中的元素是唯一的,只會出現一次的特性,這里還有一個概念:“...”
…(擴展運算符)
擴展運算符:將一個數組轉為用逗號分隔的參數序列
這樣以來就很清楚了,黑科技是不是很神奇,其實這也是大廠的一道面試題,說的是請用最少的代碼實現數組去重
新人如有錯誤,往指正,以免誤導別人~拜謝!