项目中业务经常会有一些对象数组,需要进行比较对象的某个字段名来进行去重等操作。 1、利用数组filter方法
const arr = [{key: 1, value: '哈哈'},{key: 1, value: '哈哈'},{key: 2, value: '嘿嘿'},{key: 3, value: '嘻嘻'}];
<!--遍历的数组,该cur的第一次出现的index的放入新数组-->
const newArr = arr.filter((cur, index, _selfArr) =>{
return _selfArr.findIndex(item => item.key === cur.key) ===index;
});
<!--封装成按照指定字段进行去重-->
function filterRepeat (arr, param){
return arr.filter((cur, index, _selfArr) =>{
return _selfArr.findIndex(item => item[param] === cur[param]) ===index;
});
}
2、运用reduce方法
const arr = [{key: 1, value: '哈哈'},{key: 1, value: '哈哈'},{key: 2, value: '嘿嘿'},{key: 3, value: '嘻嘻'}];
const newArr=arr.reduce((prev,element) => {
if(!prev.find(el=>el.key==element.key)) {
prev.push(element)
}
return prev
},[]);
<!--同样可以封装方法指定字段去重-->
function filterRepeat (arr, param){
return arr.reduce((prev,element) => {
if(!prev.find(el=>el[param]==element[param])) {
prev.push(element)
}
return prev
},[]);
}
3、利用对象的key值唯一性进行去重
const arr = [{key: 1, value: '哈哈'},{key: 1, value: '哈哈'},{key: 2, value: '嘿嘿'},{key: 3, value: '嘻嘻'}];
const obj = {};
const newArr = [];
arr.forEach((item, index) => {
if(!obj[item.key]){
obj[item.key] = true;
newArr.push(item);
}
})
console.log(newArr)