JS删除数组中的重复元素

2017年06月23日Web前端

过滤数组中的重复元素,有时我们会需要用到这些方法。

一、遍历数组

一看到去重,首先想到的是遍历去重,再结合indexOf方法,就可以做到去重了。

function distinct(arr) {
    var result = [];
    for (var i = 0, len = arr.length; i < len; ++i) { // IE9+才支持indexOf
        if (-1 === result.indexOf(arr[i])) {
            result.push(arr[i]);
        }
    }
    return result;
}

二、判断数组下标

类似于第一种方式:

function distinct1(arr) {
    var result = [arr[0]];
    for (var i = 1, len = arr.length; i < len; ++i) {
        if (i == arr.indexOf(arr[i])) {
            result.push(arr[i]);
        }
    }
    return result;
}

利用indexOf判断每项是否在数组中其他位置出现,来判断是否重复。

三、排序后去除相邻元素

function distinct2(arr) {
    arr.sort(function(val1, val2) {
        return val1 > val2;
    });
    var result = [arr[0]];
    for (var i = 1, len = arr.length; i < len; ++i) {
        if (arr[i] !== result[result.length - 1]) {
            result.push(arr[i]);
        }
    }
    return result;
}

先将数组排序后,按照相邻元素不相同的方式来筛选重复的元素。

四、优化遍历数组

function distinct3(arr) {
    var result = [];
    for (var i = 0, len = arr.length; i < len; ++i) {
        for (var j = i + 1; j < len; ++j) {
            if (arr[i] === arr[j]) {
                j = ++i;
            }
        }
        result.push(arr[i]);
    }
    return result;
}

该方法的实现思路是,获取没有重复的最右一值放入新数组,当检测到有重复时终止当前循环进入顶层循环的下一层判断。