数组对象去重怎么办

一、粗看题目

1、可以理解为数组中,会有很多个一样的对象。但是,‘一样’可能数据数据key顺序一样,或者key顺序不一样。比如[{a:1,b:2},{a:1,b:1}],把每一项json一下数组[0]是等于数组[1]的,但是[{a:1,b:2},{b:1,a:1}],位置替换就不等于了,可是在意义上来说是等于的。所以嘚考虑这种情况。

2、同时我也可以理解为把数组里面,每个对象的值相同的去除。

二、解决思路

以下都是算法渣渣的思路

首先说一下,一般数组去重最快的写法那无疑是 Arrar.from(new set('目标数组')),这个的知道。

对于第一种理解。我们可以写一个算法,对象的每一个key重排。这里默认key是英文字符(要是有·其他特俗字符,需要特殊处理)。写一个对象的每一个key按照26个之母顺宇重排,然后把排好的key,重新按照顺序排列,生成新的对象。再把每一项json,再去重。

1、排序字母

function sortWords(words) {
    return words.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
}

2、数据去重

Array.from(new Set(objArray.map(JSON.stringify))).map(JSON.parse);

当然,如果我们对一开始的数据进行先去除再排序key再去除还是先排序再去除我感觉取决于数据的类型。可以先用一些数据测试。根据处理时间判断过滤顺序。

对于第二种理解。我就只能想到,循环每一个对象的值,去除每个对象中重复值的情况。然后生成新的数据。

处理每一个对象

let uniqueObj = Object.entries(obj).reduce((acc, [key, value]) => {
    if (!Object.values(acc).includes(value)) {
        acc[key] = value;
    }
    return acc;
}, {});

当然遍历数组拿到每一项我就不说了。不知道这些的那我也没办法。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值