对象比较

对象比较

shallowEqual | 浅层比较

/**
 * 功能:浅层比较两个对象
 * @param {*} objA
 * @param {*} objB
 * @link https://github.com/dashed/shallowequal/blob/master/index.js
 */
function shallowEqual(objA, objB) {
  if (objA === objB) {
    return true;
  }

  // 判断是否为有效类型
  if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) {
    return false;
  }

  // 判断键是否相等
  const keysA = Object.keys(objA);
  const keysB = Object.keys(objB);

  if (keysA.length !== keysB.length) {
    return false;
  }

  // 提取出 objB 的属性判断函数
  const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);

  // 依次比较 A 中的每个属性值是否与 B 中对应一致
  for (const idx = 0; idx < keysA.length; idx++) {
    const key = keysA[idx];

    if (!bHasOwnProperty(key)) {
      return false;
    }

    const valueA = objA[key];
    const valueB = objB[key];

    if (valueA !== valueB) {
      return false;
    }
  }

  return true;
}
上一页
下一页