数组去重的方法

2018-10-29  本文已影响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;
};
上一篇下一篇

猜你喜欢

热点阅读