一、粗看题目
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;
}, {});
当然遍历数组拿到每一项我就不说了。不知道这些的那我也没办法。。。。