数组去重的方法

  1. 兼容所有浏览器的方式
/**
 * 实现功能:数组去重(数组中的每个元素都是对象)
 * 逻辑思路:第一层循环需要去重的数组;第二层循环要返回的数组中有没有某一个对象(第一层遍历的对象),
 * 有即跳过,没有就添加
 * @return 返回一个去重后的新数组
 */
Array.prototype.distinct = function () {
    var arr = this;
    var result = [];
    var flag = true; 
    for (var i = 0; i < arr.length; i++) { // 第一层循环
        flag = true; // 默认添加到要返回的数组result中
        for (var j = 0; j < result.length; j++) { // 第二层循环
            if (arr[i].userId == result[j].userId) { // 数组中元素对象的唯一值
                flag = false;
                // 如果第一层循环中的元素和结果数组中的某个元素相同,就不必再对比结果数组的剩余元素了
                // 改变j的值,结束第二层循环
                j = result.length;
            }
        }
        
        if (flag) {
            result.push(arr[i]);
        }
    }
    return result;
}

var arr = [{
    name: 'bb',
    age: 11,
    userId: 2
},{
    name: 'aa',
    age: 10,
    userId: 1
},{
    name: 'bb',
    age: 11,
    userId: 2
},{
    name: 'bb',
    age: 11,
    userId: 2
},{
    name: 'cc',
    age: 12,
    userId: 3
},{
    name: 'bb',
    age: 11,
    userId: 2
},{
    name: 'cc',
    age: 12,
    userId: 3
}];

var newArr = arr.distinct();
console.log(newArr);
  1. 使用forEach和indexOf
Array.prototype.distinct = function (){
    var arr = this,
    result = [],
    arr.forEach(function(v, i ,arr){  //这里利用map,filter方法也可以实现
        var bool = arr.indexOf(v,i+1);  //从传入参数的下一个索引值开始寻找是否存在重复
        if(bool === -1){
            result.push(v);
        }
    })
    return result;
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判...
    LuckyS007阅读 582评论 0 3
  • 方案一:遍历数组中的每一项,拿每一项和它后面的项依次比较,如果相同了,则把相同的这一项在原来数组中删除 方案二:利...
    从简ya阅读 262评论 0 0
  • 思路:1.创建一个新的数组存放结果2.创建一个空对象3.for循环时,每次取出一个元素与对象进行对比,如果这个元素...
    6659a0f02826阅读 305评论 0 0
  • function unique_arr($array2D,$stkeep=false,$ndformat=true...
    夜航星osmo阅读 982评论 0 0
  • 最近回家过年,忙着各种同学聚会,走街串巷,走访亲朋好友.发现身边的小伙伴除了几个比较铁的,年少时觉得交情深厚的除了...
    萌萌0305阅读 2,058评论 0 2

友情链接更多精彩内容