数组的去重方法

212 阅读1分钟

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优化双重遍历

  • newArr.inclues(val)
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"]