昨天提到了Array.from方法配合set可以實現排序,那么今天總結下還有哪些方法可以實現排序吶。
1:創建一個新的數組,賦予目標數組的第一個元素,然后循環判斷目標數組的第二個元素到最后一個元素,如果不包含在新數組中則push進新數組
function a1(arr) { let s = Object.prototype.toString; if(s.call(arr)!== '[object Array]'){ throw new typeError('the argument need array'); } let nArr = [] arr.forEach(function(item,index) { if(nArr.indexOf(item) === -1){ nArr.push(item) } }) return nArr; }
2:利用set結構實現 需要支持es6。
function unique(arr) { return [...new Set(arr)] }
3:利用對象的屬性不能重復進行判斷,但是對象的屬性還會自動調用toString方法,因此無法分辨string,number是否重復比如[1,'1']因此利用新數組的indexOf進行判斷下。
function unique2(array){ var n = {}, r = [], len = array.length, val; for (var i = 0; i < array.length; i++) { val = array[i]; if (!n[val]) { n[val] = [val] r.push(val); } else if (r.indexOf(val) < 0) { n[val].push(val); r.push(val); } } return r; }
