新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf 为-1 或 includes 为false)就加入该新数组中
function unique (arr ) { var newArr = [] for (var i = 0 ; i < arr.length ; i++) { if (newArr.indexOf (arr[i]) === -1 ) { newArr.push (arr[i]) } } return newArr }
数组下标判断:如果当前数组的第 i 项在当前数组中第一次出现的位置不是 i,那么表示第 i 项是重复的,忽略掉。否则存入结果数组
function unique (arr ) { var newArr = [] for (var i = 0 ; i < arr.length ; i++) { if (arr.indexOf (arr[i]) === i) { newArr.push (arr[i]) } } return newArr }
function unique (arr ) { return arr.filter ((v, i, array ) => array.indexOf (v) === i) }
虽然对象属性同样可以用来做数组去重,但是会将 number,NaN,undefined,null,变为字符串形式,因为对象的属性名就是一个字符串
function Deduplication (arr ) { var result = [] var hashMap = {} for (var i = 0 ; i < arr.length ; i++) { var temp = arr[i] if (!hashMap[temp]) { hashMap[temp] = true result.push (temp) } } return result }
Deduplication ([[undefined , 'undefined' ]])
function unique (arr ) { var x = new Set (arr) return [...x] }
function distinct (arr, id ) { let map = new Map () return arr.filter ((item, index ) => { if (map.get (item[id])) return false map.set (item[id], true ) return true }) } function uniqBy (arr, key ) { return [...new Map (arr.map ((item ) => [item[key], item])).values ()] }