JavaScript学习笔记:数组去重

特别声明:小站对部分原创文章已开启付费阅读,并开通年费VIP通道,年费价格为 ¥365.00元。如果您喜欢小站的内容,可以点击开通会员进行全站阅读。如果您对付费阅读有任何建议或想法,欢迎发送邮件至: airenliao@gmail.com!(^_^)

话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组相关的知识,趁此机会整理了一些有关于JavaScript数组去重的方法。

下面这些数组去重的方法是自己收集和整理的,如有不对希望指正文中不对之处。

双重循环去重

这个方法使用了两个for循环做遍历。整个思路是:

  • 构建一个空数组用来存放去重后的数组
  • 外面的for循环对原数组做遍历,每次从数组中取出一个元素与结果数组做对比
  • 如果原数组取出的元素与结果数组元素相同,则跳出循环;反之则将其存放到结果数组中

代码如下:

Array.prototype.unique1 = function () {
    // 构建一个新数组,存放结果
    var newArray = [this[0]];
    // for循环,每次从原数组中取出一个元素
    // 用取出的元素循环与结果数组对比
    for (var i = 1; i < this.length; i++) {
        var repeat = false;
        for (var j=0; j < newArray.length; j++) {
            // 原数组取出的元素与结果数组元素相同
            if(this[i] == newArray[j]) {
                repeat = true;
                break;
            }
        }
        if(!repeat) {
            // 如果结果数组中没有该元素,则存放到结果数组中
            newArray.push(this[i]);
        }
    }
    return newArray;
}

假设我们有一个这样的数组:

var arr = [1,2,3,4,'a','b',1,3,4,56,32,34,2,'b','c',5,'1',`2`];

arr.unique1(); // [1, 2, 3, 4, "a", "b", 56, 32, 34, "c", 5]

据说这种方法比较耗时,费性能。简单做个测试(测试方法写得比较拙逼):

function test () {
    var arr = [];
    for (var i = 0; i < 1000000; i++) {
        arr.push(Math.round(Math.random(i) * 10000));
    }
    doTest(arr, 1);
}
function doTest(arr, n) {
    var tStart = (new Date()).getTime();
    var re = arr.unique1();
    var tEnd = (new Date()).getTime();
    console.log('双重循环去重方法使用时间是:' + (tEnd - tStart) + 'ms');
    return re;
}
test();

在Chrome控制器运行上面的代码,测试双重循环去重所费时间:11031ms

上面的方法可以使用forEach()方法和indexOf()方法模拟实现:

function unique1() {
    var newArray = [];
    this.forEach(fun
剩余80%内容付费后可查看

如需转载,烦请注明出处:https://www.w3cplus.com/javascript/remove-duplicates-from-javascript-array.html

如果文章中有不对之处,烦请各位大神拍正。如果你觉得这篇文章对你有所帮助,打个赏,让我有更大的动力去创作。(^_^)。看完了?还不过瘾?点击向作者提问!

赏杯咖啡,鼓励他创作更多优质内容!
返回顶部