利用es6 set集合成員具有唯一值的特性,再借助array.from將類陣列轉為真正的陣列
我們可以很簡單的完成陣列去重任務
let res = array.from(new set(arr));
indexof():
返回陣列中某個指定的元素第一次出現的位置(索引)。如果在陣列中沒找到指定元素則返回 -1。
filter():
返回指定陣列中符合條件的所有元素
關鍵語句:
index === array.indexof(ele)
我們利用indexof得到的下標與當前元素的下標來判斷這個元素是否是第一次出現,然後在利用filter的過濾特性即可。
這裡需要注意的判斷nan,因為nan !== nan,所以indexof(nan)始終返回-1,所以我們需要額外去判斷
array.prototype.uniq = function()
return index===array.indexof(ele)
})}
核心:利用物件的鍵來儲存我們的元素
如果沒有物件中沒有這個鍵,則進行儲存,並設定這個鍵對應值為true,表明已經存在該元素
array.prototype.uniq = function();
let data = ;
this.foreach(ele =>
})return data;
}
注意:由於普通物件的鍵都是字串,所以對於像number(1)和string(1)則視為它們是同一值,無法正確判斷,對於引用型別的資料也是如此( 如 {} 和 {} 視為同一值)
解決辦法:在es6中提供了map集合,map的鍵不再侷限於字串,而是任意型別,可以說是乙個完整的hash結構,利用map替換普通物件{}則可以解決上面的問題
array.prototype.uniq = function()
});return data;
}
在陣列排序後,相同的資料會集中在一起,因此只需要比較相鄰元素是否相等即可,
比較符可以用嚴格比較運算子(===)或者object.is()
它們不同之處只有兩個:一是+0不等於-0,二是nan等於自身。
所以對於nan,如果使用===,則需要額外判斷
根據如下方案,陣列最後乙個元素必然是唯一值,所以在迴圈後把末尾的元素新增進去
array.prototype.uniq = function()
}res.push(arr.pop());
return res;
}
你可能不知道的JS陣列去重方法
利用es6 set集合成員具有唯一值的特性,再借助array.from將類陣列轉為真正的陣列 我們可以很簡單的完成陣列去重任務 let res array.from new set arr indexof 返回陣列中某個指定的元素第一次出現的位置 索引 如果在陣列中沒找到指定元素則返回 1。filt...
你可能不知道的JS函式
日常業務寫的太多已經麻痺了神經,很多本該知道的知識早已拋之腦後,大家都知道在js中函式是一等公民,但是竟然連它的特性都不清楚,真是慚愧。在日常業務開發中,通常都會在資料中給乙個預設值,然後在請求後端資料後替換掉預設值,如果完全替換整個物件肯能並不是我們想要的,也可能會出現一些為止的錯誤,又或者需要對...
你可能不知道的東西
元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot...