- 兼容所有浏览器的方式
/**
* 实现功能:数组去重(数组中的每个元素都是对象)
* 逻辑思路:第一层循环需要去重的数组;第二层循环要返回的数组中有没有某一个对象(第一层遍历的对象),
* 有即跳过,没有就添加
* @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);
- 使用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;
};
网友评论