摘要:遍歷無法判斷循環去重效率較高遍歷效率不如判斷不出遍歷遍歷解決無法排除問題排除解決問題索引去重把直接全部去除掉了索引去重索引去重集合轉換效率低能去掉重復集合轉換掛載方法到上總結遍歷無法判斷需要手動判斷效率最高索引去重直接把所有干掉了看
const arr = [1,2,"1",null,null,undefined,undefined,false,false,NaN,NaN];
1.0 遍歷 無法判斷NaN
//for循環去重,效率較高 const unique1 = (arr)=>{ const newArr = []; let item; for (let i = 0 , len = arr.length ; i < len; i++) { item = arr[i]; if(newArr.indexOf(item) === -1){ newArr.push(item); } } return newArr; } console.log("遍歷:unique1",unique1(arr));//[1, 2, null, false, NaN, NaN] //forEach 效率不如for,判斷不出NaN const unique2 = (arr)=>{ const newArr = []; arr.forEach(item=>{ if(newArr.indexOf(item) === -1){ newArr.push(item); } }) return newArr; } console.log("遍歷:unique2",unique2(arr));//[1, 2, null, false, NaN, NaN] //reduce const unique3 = (arr)=>{ return arr.reduce((pre,next)=>{ if(pre.indexOf(next) === -1){ pre.push(next) }; return pre; },[]) } console.log("遍歷:unique3",unique3(arr));//?[1, 2, null, false, NaN, NaN] //解決NaN無法排除問題 const unique1_1 = (arr)=>{ const newArr = []; let item; let flag = true; for (let i = 0 , len = arr.length ; i < len; i++) { item = arr[i]; if(newArr.indexOf(item) === -1){ if(item != item){ //排除NaN if(flag){ newArr.push(item); flag = false; } }else { newArr.push(item); } } } return newArr; } console.log("解決NaN問題:unique1_1",unique1_1(arr));//[1, 2, null, false, NaN]
2.0 索引去重 把NaN直接全部去除掉了
//2.1for const unique4 = (arr)=>{ const newArr = []; let item; for (let i = 0 , len = arr.length; i < len; i++) { item = arr[i]; if(arr.indexOf(item) === i){ newArr.push(item); } } return newArr; } console.log("索引去重:unique4",unique4(arr));//[1, 2, null, false] //2.2filter const unique5 = (arr)=>{ return arr.filter((item,index,arr)=>arr.indexOf(item) === index) } console.log("索引去重:unique4",unique5(arr));//[1, 2, null, false]
3.0集合轉換 效率低,能去掉重復NaN;
//Set const unique6 = (arr)=>{ return Array.from(new Set(arr)); } console.log("集合轉換:unique6",unique6(arr));
掛載方法到Array上
const unique = function(){ return Array.from(new Set(this)); } Array.prototype.unique = unique; const uniqueArr = arr.unique();
總結: 遍歷無法判斷NaN需要手動判斷,for效率最高;索引去重直接把所有NaN干掉了,看情況使用;Set去重簡單、能去掉NaN,但是效率最低;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108499.html
摘要:數組去重是校招面試的必考知識點。以下就是筆者所實現的數組去重的幾種簡單的方式。結合實現這種方法的關鍵點就是判斷是否相同的時候不要忽略對元素類型的判斷。以上就是筆者所想到的幾個數組去重的方式大家如果有更好的方法歡迎留言。 數組去重,是校招面試的必考知識點。簡單的說,數組去重就是將一個數組中的相同的元素刪除,只保留其中的一個。這里的相同其實是一個陷阱,有好多同學只認為值相等即為相同,而忽略...
摘要:前幾天在做了一道題,這道題的核心問題是數組去重。現寫一函數,返回一個新的升序的字符串,其值由中的值組成,要求包含最多字符且不能重復。代碼中的和函數是中的數組方法。 前幾天在codewars做了一道題,這道題的核心問題是數組去重。昨晚之后看到別人的solution,感覺自己的solution太low了。 題目 Take 2 strings s1 and s2 including only...
摘要:數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些你能答出其中的種,面試官很有可能對你刮目相看。數組去重的方法一利用去重中最常用不考慮兼容性,這種去重的方法代碼最少。 數組去重,一般都是在面試的時候才會碰到,一般是要求手寫數組去重方法的代碼。如果是被提問到,數組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看...
閱讀 3256·2021-09-22 15:58
閱讀 1719·2019-08-30 14:17
閱讀 1722·2019-08-28 18:05
閱讀 1508·2019-08-26 13:33
閱讀 688·2019-08-26 12:20
閱讀 611·2019-08-26 12:18
閱讀 3195·2019-08-26 11:59
閱讀 1408·2019-08-26 10:36