1.双层循环
var unique = function(arr) {
var res = []
var len = arr.length
for(var i = 0; i < len; i++) {
for(var j = 0; j < res.length; j++) {
if(arr[i] === res[j]) {
break
}
}
// 循环结束再push进去
if(j === res.length) {
res.push(arr[i])
}
}
log('unique', res)
return res
}
2.使用indexOf简化内层循环
var unique1 = function(arr) {
var result = []
var len = arr.length
for(var i = 0; i < len; i++) {
var a = arr[i]
if(result.indexOf(a) == -1) {
result.push(a)
}
}
log('unique1', result)
return result
}
3.排序后去重
// 先将旧数组排序,相同的就会排在一起,然后判断当前元素和下一个是否相同,不相同就push进去
var unique2 = function(arr) {
var res = []
var sortedAarray = arr.concat().sort()
var len = sortedAarray.length
for(var i = 0; i < len; i++) {
if(sortedAarray[i] !== sortedAarray[i+1]) {
res.push(sortedAarray[i])
}
}
log('unique2', res)
return res
}
// 4.使用ES5的filter方法,也可以先排序再去判断
var unique3 = function(arr) {
var res = arr.filter(function(item, index, arr) {
return arr.indexOf(item) === index
})
log('unique3', res)
return res
}
unique3(arr)
var unique3 = function(arr) {
var res = arr.concat().sort().filter(function(item, index, arr) {
return item !== arr[index + 1]
})
log('unique3', res)
return res
}
unique3(arr)
5.ES6 Set数据结构
var unique4 = function(arr) {
var res = [...new Set(arr)]
//var res = Array.from(new Set(arr))
log('unique4', res)
return res
}
unique4(arr)