JavaScript中对象数组的去重以及深浅拷贝的理解

题目:给定一个对象数组,写一个函数对该数组去重,函数需带有两个参数,第一个参数为需要去重的数组,第二个参数是一个包含一个或多个对象属性的数组,根据指定的属性进行去重。

做这道题之前我们先来回顾某些知识点:

1、深拷贝和浅拷贝

浅拷贝:只拷贝一层,后面均为引用
深拷贝:多层拷贝

let arr1 = [1,2,3,4,5,6,7,8]
let newArr = []                
let newArr = arr1                              //直接引用,非拷贝
Object.assign(newArr, arr1)                    //浅拷贝(es6的
//深拷贝(利用JSON,有问题1、会丢失function和undefined 2、NaN、Infinity会变成null
let newArr = JSON.parse(JSON.stringify(arr1))  

2、js中对象属性调用 . 和 [ ] 的区别
一句话总结:[ ]里可以跟变量,而 . 后只能跟字符串。如果对象的key是symbol类型,则只能通过[ ]来调用。

下面开始解题:

let arrList = [            
{id:1,name:'a',sex:male},            
{id:2,name:'b',sex:male},            
{id:3,name:'c',sex:female},
{id:4,name:'d',sex:female},            
{id:1,name:'a',sex:male},            
{id:2,name:'c',sex:male},            
{id:3,name:'b',sex:female}, 
{id:5,name:'d',sex:female},            
{id:5,name:'e',sex:male},            
{id:5,name:'f',sex:male}        
]
function unique(arr, paramList) {
  const res = new Map()
  for (let i = 0; i < paramList.length; i++) {
    arr = arr.filter(temp => !res.has(temp[paramList[i]]) && res.set(temp[paramList[i]]))
  }
  return arr
}
console.log(JSON.stringify(arrList)) //原数组
console.log('-----------------------------------------------')
let arr1 = unique(arrList, ['id', 'name'])
console.log(JSON.stringify(arr1)) //去掉了id和name重复的元素
console.log('-----------------------------------------------')
let arr2 = unique(arrList, ['id', 'name', 'sex'])
console.log(JSON.stringify(arr2)) //去掉了id,name,sex重复的元素

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值