数组去重

目前看到最简洁的方式  使用filter去重(但效率不是最高)

myArray = [22,22,33,44,44,55,55];

myArray.filter(function(element, index, arr){return arr.indexOf(element)== index;})

//[22, 33, 44, 55]

使用filter  只有当前元素在数组中第一次出现才push到结果数组

传统的方式

//为Array类型增加函数  使其可以去重
//利用obj的hash特性
Array.prototype.eraseDuplicate = function() { var after = {}; var re = []; for (var i = 0; i < this.length; i++) { if (!after[this[i]]) { after[this[i]] = 1; re.push(this[i]); } } return re; }; console.log([1, 2, 3, 3, 4, 55, 6, 6].eraseDuplicate()); //写一个可以对二位数组去重的 找出出现过的数字(不重复) var arr = [2, 3, [4, 6, [3, 8]], 12, 10]; Array.prototype.getUnq = function() { var rs = []; var arr = this; (function getUnique(arr) { for (var i = 0, len = arr.length; i < len; i++) { if (arr[i].constructor == Array) { arguments.callee(arr[i]); } else { if (rs.indexOf(arr[i]) == -1) { rs.push(arr[i]); } } } })(arr); return rs; } rs = arr.getUnq(); console.log(rs); //PS 递归函数应始终使用arguments.callee

还有一种方式 如果只是去除重复元素 对数据顺序没有要求的话 可以先对数组排序 然后挨个比较 如果当前和前一个相同 就去掉当前

参考刘春龙的博客http://php.js.cn/blog/array-unique-in-javascript/   博客中的方案3 和 我这里面提到的第一个是同一种思想

这种貌似是效率最高的

Array.prototype.unique4 = function()
{
    this.sort();
    var re=[this[0]];
    for(var i = 1; i < this.length; i++)
    {
        if( this[i] !== re[re.length-1])
        {
            re.push(this[i]);
        }
    }
    return re;
}
原文地址:https://www.cnblogs.com/cart55free99/p/4188473.html