1、使用reduce
定义一个obj,用reduce遍历数组,如果obj里面存在当前项的id,则不做操作,如果obj存在当前项的id,则obj添加当前id数据,并且push到reduce的累加项里。最后return preArr
// 数组对象去重
function unique(arr) {
let obj = {}
return arr.reduce((preArr,item) => {
obj[item.id] ? '' : obj[item.id] = true && preArr.push(item)
return preArr;
},[])
}
let res = unique([{"id":1,"name":"张三"},{"id":2,"name":"李四"},{"id":3,"name":"王五"},{"id":2,"name":"张三"}])
console.log('去重后的数组',res); // [{"id":1,"name":"张三"},{"id":2,"name":"李四"},{"id":3,"name":"王五"}]
2、使用map和filter
判断map对象是否有id和name,如果有则返回false,被filter过滤掉。如果没有则map.set进去返回true被filter捕获
function unique(arr) {
const map = new Map
return arr.filter(item => !map.has(item.id) && !map.has(item.name) && map.set(item.id,true) && map.set(item.name,true))
}
let arr = [
{"id":1,"name":"张三","mobile": '12345'},
{"id":2,"name":"李四","mobile": '45678'},
{"id":3,"name":"王五","mobile": '75351'},
{"id":1,"name":"张三","mobile": '15155'}
]
console.log('去重后的对象',unique(arr)); // [{"id":1,"name":"张三","mobile": '12345'},{"id":2,"name":"李四","mobile": '45678'},{"id":3,"name":"王五","mobile": '75351'}]
3、使用forEach
function unique(arr) {
let obj = {}
let resArr = []
arr.forEach(item => {
if(!obj[item.id]) {
obj[item.id] = true && resArr.push(item)
}
})
return resArr
}
let arr = [
{"id":1,"name":"张三","mobile": '12345'},
{"id":2,"name":"李四","mobile": '45678'},
{"id":3,"name":"王五","mobile": '75351'},
{"id":1,"name":"张三","mobile": '15155'}
]
console.log('去重后的对象',unique(arr)); // [{"id":1,"name":"张三","mobile": '12345'},{"id":2,"name":"李四","mobile": '45678'},{"id":3,"name":"王五","mobile": '75351'}]
4、基本数据类型的数组去重
function unique(arr) {
// return [...new Set(arr)]
return Array.from(new Set(arr))
}
let arr = [1,2,5,7,4,2,8,7,3,1,4,5,7,4,3,2,5,6,4]
console.log(unique(arr).sort()); // [1, 2, 3, 4, 5, 6, 7, 8]