前端面试题-数组去重的6种方式

66 阅读1分钟

1、利用对象属性名的唯一性(ES5+)

function unique(arr) {
    var ret = { };
    for (var i = 0; i < arr.length; i++) {
        if (!ret[arr[i]]) {
            ret[arr[i]] = true;
        }
    }
    return Object.keys(ret); // 获取对象所有属性名的数组
}

2、利用列表 includes (ES5+)

function unique(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; i ++) {
        if (!ret.includes(arr[i])) {
            ret.push(arr[i]);
        }
    }
    return ret;
}

3、使用 Set 数据结构(ES6+)

function unique(arr) {
    return [...new Set(arr)];
}

function unique(arr) {
    return Array.from(new Set(arr)); 
}

4、使用 Array.prototype.filter() 方法(ES6+)

function unique(arr) {
    return arr.filter((value, index, self) => {  
            return self.indexOf(value) === index;  
        });
}

5、使用 Array.prototype.reduce() 方法(ES6+)

function unique(arr) {
    return arr.reduce((accumulator, currentValue) => {  
            if (!accumulator.includes(currentValue)) {  
                accumulator.push(currentValue);  
            }  
            return accumulator;  
        }, []);
}

6、使用 Array.prototype.find() 方法(ES6+)

function unique(arr) {
    let uniqueArr = [];  
    for (let i = 0; i < arr.length; i++) {  
        if (!uniqueArr.find(element => element === arr[i])) {  
            uniqueArr.push(arr[i]);  
        }  
    }
    return uniqueArr;
}