JavaScript数组去重的8种常用实现方法

作者:青柠时间:2026-10-25 02:56:46浏览:294

本文详细总结了JavaScript中实现数组去重的八种常用方法,包括利用对象属性、Set数据结构、Sort排序、Filter过滤、Map对象以及Reduce累加器等技巧。每种方法均附带完整可运行的代码示例,帮助开发者根据实际场景选择最优方案,提升前端数据处理效率。

引言:数组去重的应用场景与重要性

数组去重通常出现在面试场景中,要求手写实现数组去重方法的代码。若被问及数组去重的方法有哪些,能列举出其中的10种,面试官可能会对你刮目相看。 在实际项目中,数组去重多由后端处理,前端较少涉及。尽管日常开发中使用频率不高,但仍需了解,以应对可能的面试提问。

1. 利用对象的属性

该方法基于对象属性名唯一性的原理进行去重。

方法一:利用对象属性去重


var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
console.time("nonredundant1");
var nonredundant1 = Object.getOwnPropertyNames(arr.reduce(function(seed, item, index) {
    seed[item] = index;
    return seed;
},{}));
console.timeEnd("nonredundant1");
console.log(nonredundant1);

运行结果如下:

引言:数组去重的应用场景与重要性

2. 使用Set数据结构

Set是一种类似数组的结构,其成员值均唯一,不允许重复。通过Set构造函数可以接收数组或类数组参数来生成Set对象。随后,利用Array.from方法将Set对象转换为真正的数组,该方法适用于将类似数组的对象(如ES6新增的Set和Map结构)转换为数组。

方法二:使用Set数据结构去重


var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique (arr) {
    return Array.from(new Set(arr))
}
console.time("nonredundant2");
var nonredundant2 = unique(arr);
console.timeEnd("nonredundant2");
console.log(nonredundant2);

运行结果如下:

引言:数组去重的应用场景与重要性

3. 使用for循环结合splice方法

方法三:for循环与splice结合去重


function unique(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {         //第一个等同于第二个,splice方法删除第二个
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
console.time("nonredundant3");
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
var nonredundant3 = unique(arr);
console.timeEnd("nonredundant3");
console.log(nonredundant3);

运行结果如下:

引言:数组去重的应用场景与重要性

4. 使用indexOf判断去重

方法四:indexOf判断去重


function unique(arr) {
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array .indexOf(arr[i]) === -1) {
            array .push(arr[i])
        }
    }
    return array;
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant4");
var nonredundant4 = unique(arr);
console.timeEnd("nonredundant4");
console.log(nonredundant4);

运行结果如下:

引言:数组去重的应用场景与重要性

5. 使用sort排序后去重

方法五:sort排序后去重


function unique(arr) {
    arr = arr.sort()
    var arrry = [arr[0]];
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] !== arr[i - 1]) {
            arrry.push(arr[i]);
        }
    }
    return arrry;
}
 
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant5");
var nonredundant5 = unique(arr);
console.timeEnd("nonredundant5");

运行结果如下:

引言:数组去重的应用场景与重要性

6. 使用filter过滤去重

方法六:filter过滤去重


function unique(arr) {
    var obj = {};
    return arr.filter(function(item, index, arr){
        return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
    })
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant6");
var nonredundant6 = unique(arr);
console.timeEnd("nonredundant6");
console.log(nonredundant6);

运行结果如下:

引言:数组去重的应用场景与重要性

7. 使用Map数据结构去重

方法七:Map数据结构去重


function unique(arr) {
    let map = new Map();
    let array = new Array();  // 数组用于返回结果
    for (let i = 0; i < arr.length; i++) {
        if (map.has(arr[i])) {  // 如果有该key值
            map.set(arr[i], true);
        } else {
            map.set(arr[i], false);   // 如果没有该key值
            array.push(arr[i]);
        }
    }
    return array;
}
 
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant7");
var nonredundant7 = unique(arr);
console.timeEnd("nonredundant7");
console.log(nonredundant7);

运行结果如下:

引言:数组去重的应用场景与重要性

8. 使用reduce和include逻辑去重

方法八:reduce与include逻辑去重


function unique(arr){
    return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant8");
var nonredundant8 = unique(arr);
console.timeEnd("nonredundant8");
console.log(nonredundant8);

运行结果如下:

引言:数组去重的应用场景与重要性

本文介绍了JavaScript中常用的数组去重实战源码,更多相关JS数组去重内容可搜索本站历史文章或继续浏览后续文章,感谢大家的支持。

作者最新文章