1、双重遍历去重
- 取一个元素和剩下的元素进行比较,如果不等,说明唯一。
let arr = [1,2,3,1,2,3,'1','2','3',1,2,3,3]
function unique(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
let isUnique = true
for (var j = i + 1; j < arr.length; j++) {
if(JSON.stringify(arr[i]) === JSON.stringify(arr[j])){
isUnique = false
break
}else{
isUnique = true
}
}
if(isUnique) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr)) // ['1', '2', '3', 1, 2, 3]
2、利用indexOf优化双重遍历
- 用newArr.indexOf(arr[i])代替内层for循环
let arr = [1,2,3,1,2,3,'1','2','3',1,2,3,3]
function unique() {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if(newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
return newArr
}
console.log(unique(arr)) // [1, 2, 3, "1", "2", "3"]
3、 利用includes优化双重遍历
let arr = [1,2,3,1,2,3,'1','2','3',1,2,3,3]
function unique() {
var newArr = []
for (let val of arr) {
if(!newArr.includes(val)) {
newArr.push(val)
}
}
return newArr
}
console.log(unique(arr)) // [1, 2, 3, "1", "2", "3"]
4、 Set方法
- Set类似与数组,但是成员的值是唯一的,没有重复的
let arr = [1,2,3,1,2,3,'1','2','3',1,2,3,3]
function unique(arr) {
let newArr = new Set(arr)
return Array.from(newArr)
// return [...newArr]
}
console.log(unique(arr)) // [1, 2, 3, "1", "2", "3"]
5、Array.prototype.reduce方法
let arr = [1,2,3,1,2,3,'1','2','3',1,2,3,3]
function unique(arr) {
let newArr = arr.reduce((cur, val) => {
if(!cur.includes(val)){
cur.push(val)
}
return cur
}, [])
return newArr
}
console.log(unique(arr)) // [1, 2, 3, "1", "2", "3"]