Skip to content

对象数组去重 ​

javascript
const isObject = val => typeof val === 'object' && val !== null;

function uniqeArr(newArr) {
  for (let i = 0; i < newArr.length; i++) {
    // 去掉i+1开始后续的值
    for (let j = i + 1; j < newArr.length; j++) {
      if (equals(newArr[j], newArr[i])) {
        // 去掉该值
        newArr.splice(j, 1);
        j--;
      }
    }
  }
}

// 判断数组各项是否相等
function equals(val1, val2) {
  if (isObject(val1) && isObject(val2)) {
    const keys1 = Object.keys(val1),
      keys2 = Object.keys(val2);
    if (keys1.length !== keys2.length) {
      return false;
    }
    for (const k of keys1) {
      if (!keys2.includes(k)) {
        return false;
      }
      if (!equals(val1[k], val2[k])) {
        return false;
      }
    }
    return true;
  } else {
    return val1 === val2;
  }
}