项目开发过程中经常会处理数据,其中数组中的对象去重是最凡人的,今天笔者就将数组当中的对象去重方法分享给大家,大家使用的时候只需要调用这个方法,传入你要去重的数组以及对象的唯一值就可以了。
PS:笔者封装的这个方法不论是参数是对象还是普通的数字或者字符串都可以实现去重
// 首先搞三个数组用来待会测试
// 要进行去重的数组
const arr = [
{
id: 1,
name: '吴迪',
}, {
id: 2,
name: '林增辉',
}, {
id: 1,
name: '吴迪',
},
];
const arr2 = [1, 2, 3, 1];
const arr3 = ['a', 'b', 'c', 'a'];
\
接下来开始封装去重的方法:
/**
* 数组去重(对象或者普通数字字符串都可以)
* @param
* arr 要去重的数组 Array类型
* key 如果是数组中是对象,key为对象的唯一值,根据此唯一值进行去重,String类型,非必填
* @returns newArr,去重后的数组,如果没有传递参数则返回空数组
*/
function arrayToHeavy(arr, key) {
if (!arr) return [];
if (Object.prototype.toString.call(arr) !== '[object Array]') return console.warn('You need to pass an array to arrayToHeavy!');
let newArr = [];
// 普通的数字字符串去重
if (!key) {
newArr = Array.from(new Set(arr));
} else { // 数组对象去重
const keyArr = [];
arr.forEach((ite) => {
if (!keyArr.includes(ite[key])) {
keyArr.push(ite[key]);
newArr.push(ite);
}
})
}
return newArr;
}
此方法中做了些错误处理,
- 如果没有传递参数默认返回一个空数组
- 如果传递的第一个参数不是一个数组则输出一个warn提示
演示结果:
笔者将我们初始定义的三个数组全部调用了此方法进行过滤,效果还不错~
此方法如有bug或您有更好的处理方式请在下方评论,笔者会及时更新。
欢迎观看笔者更多的骚操作哦~