簡單的數組去重是比較簡單的,方法也特別多,如給下面的數組去重:數組
let arr = [1,2,2,4,9,6,7,5,2,3,5,6,5]
最經常使用的能夠用for循環套for循環,再用splice刪除重複的數組:spa
let arrUnique = function (arr){ for(let i=0; i<arr.length; i++){ for(let j=i+1; j<arr.length; j++){ if(arr[i]==arr[j]){ //第一個等同於第二個,splice方法刪除第二個 arr.splice(j,1); j--; } } } return arr; }
然而數組的子集爲對象時,通常不使用多個for循環來去重,以下面的數組對象:code
let arr = [ { mch_id:'ghx1', status: 1, type: 2 }, { mch_id:'awx2', status: 2, type: 3 }, { mch_id:'ghx1', status: 1, type: 2 }, { status: 1, type: 2, mch_id:'ghx1' } ]
經過觀察,咱們能夠發現該數組中的第一、三、4項實際上是同樣的,最初在谷歌找了幾個方法最終都不太滿意,好比會改變數組中對象原來的排序、數組去重失敗等,後來通過屢次嘗試和實踐,得出如下最簡單的方法:對象
let arrUnique = function(arr){ let result = {}; let finalResult=[]; for(let i=0;i<arr.length;i++){ //利用對象的鍵名沒法重複的特色,cpmch_id是惟一區別的屬性值 result[arr[i].mch_id] ? '' : result[arr[i].mch_id] = true && finalResult.push(arr[i]); } return finalResult; }
或者利用ES5數組方法reduceblog
let arrUnique = function(arr){ let ojb = {}; arr = arr.reduce(function(prevArr, currentItem) { //利用對象的鍵名沒法重複的特色,mch_id是惟一區別的屬性值 ojb[currentItem.mch_id] ? '' : ojb[currentItem.mch_id] = true && prevArr.push(currentItem); return prevArr }, []) return arr; }
提早祝你們勞動節快樂排序