Skip to content

你不知道的数组去重

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;
}