陣列去重是一道很常見的面試題,方法也是不盡相同,除去最常見的set方法外,記錄兩種簡便的陣列去重方法
let arrs=[1,2,3,1,2,3,nan,nan,null,null,undefined,undefined,'a','a']function
dery(arr)
console.log(dery(arrs))
//[1, 2, 3, null, undefined, "a"]
這個陣列把我們能考慮到基本型別都考慮到了,但是nan是乙個特殊的值,在進行indexof的時候 nan是在陣列中取不到的,所以就把nan去除掉了。因為indexof也是進行了乙個遍歷,所以這種方法時間複雜度為o(n²)。
接下來看另一種方法:
function
dery(arr)
return arrs.filter(item=>obj.hasownproperty(typeof item+item)?false:(obj[typeof item+item]=true
)) }
console.log(dery(arrs))
//[1, 2, 3, nan, null, undefined, "a"]
這種方法是引入乙個空物件來對陣列中元素進行判斷,如果物件中沒有這個 元素,將這個元素設為物件的屬性並返回true,如果有這個元素就說明之前已經遍歷到了,是重複的元素,返回false。因為是將陣列元素型別+
元素本身轉為字串設定為的物件屬性和,所以遇到nan時,預設下乙個nan與上乙個相等,所以這種方法不能去重nan。從效能上來考慮,時間複雜度為o(n),但是開闢了乙個物件,所以占用了記憶體,但對於v8引擎來說這點記憶體可以忽略不計。
JS陣列去重,物件去重
例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...
sqlserver記錄去重
insert into employee select2,emp name gender department salary from employee select from select row number over partition by emp id order by emp id em...
資料基本型別及對應基本型別類
基本資料型別 char 16位 byte 8位 short 16位 int 32位 long,float,double,boolean 基本資料型別對應類 character,byte,short,integer,long,float,double,boolean,string 幾乎所有型別類都有相...