美文网首页
数组去重的方法

数组去重的方法

作者: 李华炎 | 来源:发表于2018-10-29 01:10 被阅读0次
    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;
    };
    

    相关文章

      网友评论

          本文标题:数组去重的方法

          本文链接:https://www.haomeiwen.com/subject/uwsvtqtx.html