对象数组去重

对象去重?伪命题吧,但是面试时还真有过,但是当时脑抽了,没能写出来,现在来补充一下,凑合能用

function isObj(obj){ // 宽松判断
    return typeof obj === 'object'
}
function objToString(obj){
	   return JSON.stringify(sortKey(obj)) // JSON.stringify是对象转字符串的最佳方法,无论有几层嵌套
}
function sortKey(obj){ // 整理键值顺序
    	var keys = Object.keys(obj).sort();
    	var tempObj = {};
	keys.forEach( key => {
		tempObj[key] = isObj(obj[key]) ? sortKey(obj[key]) : obj[key];
	})
	return tempObj
}
var arr = [ // mock数据
    {name:'123',detail:{lastName:'12',firstName:'3',age:{to:'18',from:'96'}}},
    {detail:{lastName:'12',firstName:'3',age:{to:'18',from:'96'}},name:'123'}
]
function objSet(arr){
    var result_set = [] // 缓存已经过键值顺序调整且经过toString处理的“对象”
    var obj_set = []  // 存放真正的去重对象
    arr.forEach(item=>{
        var target = objToString(item); // 要将对象转成对字符串进行比较,关键
        if(!result_set.includes(target)){
            obj_set.push(item)
            result_set.push(target)
        }
    })
    return obj_set
}
objSet(arr)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值