你不知道的数组去重
Code
ts
/**
* 数组去重
* 两个属性相同的对象也认为是重复的
*/
function uniqueArray(arr) {
}
解析
ts
/**
* 需要比较对象,需要传统比较
*/
function uniqueArray(arr) {
const result = [];
outer: for(const item of arr ) {
for (const r of result) {
// item 和 r 是否相同
if (equals(item, r)) {
continue outer;
}
}
result.push(item)
}
return item;
}
function isPrimitive(value) {
return value !== Object(value);
}
function equals(value1, value2) {
if (isPrimitive(value1) || isPrimitive(value2)) {
return Object.is(value1, value2);
}
const entries1 = Object.entries(value1);
const entries2 = Object.entries(value2);
const keys2 = Object.keys(value2)
if (entries1.length !== entries2.length) {
return false;
}
for (const [key, value] of entries1) {
if (!keys2.include(key)) {
return false;
}
if (!equals(value, value2[key])) {
return false;
}
}
return true;
}