const isBasicType = (t: any) => {
return t === "number" || t === "string" || t === "boolean" || t === 'undefined';
}

/**
* 数组和对象都能比较
* @param a
* @param b
* @returns {boolean}
*/
function compareByObject(a:any,b:any){
const keysA = Object.keys(a);
const keysB = Object.keys(b);
if (keysA.length !== keysB.length) {
return false;
}

const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(b);
for (let idx = 0; idx < keysA.length; idx++) {
const key = keysA[idx];
if (!bHasOwnProperty(key) || a[key] !== b[key]) {
return false;
}
}
return true;
}

const shallowEqual = (a:any, b:any) => {

const aType = typeof a;
const bType = typeof b;

if (aType !== bType) {
return false;
}

if (isBasicType(aType) && isBasicType(bType)) {
return a === b;
}

if (typeof a !== "object" || !a || typeof b !== "object" || !b) {
return false;
}

if (a === b) {
return true;
}

return compareByObject(a,b);
};

export {
shallowEqual
}

最新文章

  1. mac 下配置 git
  2. 01-C#入门(函数重载、委托)
  3. 用word-break: break-all解决不正确换行问题
  4. sql apply
  5. 灰度图像--图像增强 直方图均衡化(Histogram equalization)
  6. C#调用Web Service时的身份验证
  7. localStrorage、 sessionStorage 、cookie
  8. (转载)XML Tutorial for iOS: How To Read and Write XML Documents with GDataXML
  9. iOS获取运营商信号强度
  10. NameNode和SecondaryNameNode工作原理剖析
  11. openssl中RSA数字签名的使用
  12. bash计算上下行数据差值
  13. jdbc--取大量数据
  14. synchronized(二)
  15. 2018.4.23 git命令总结
  16. Hibernate 抓取策略
  17. QT5 QSS
  18. hbase源码系列(十四)Compact和Split
  19. SQL Server中搜索特定的对象
  20. fdisk -l不显示磁盘信息的问题

热门文章

  1. 了解舵机以及MG996R的控制方法
  2. python 操作 WhiteSpace 语言
  3. 跳板攻击之:frp代理转发
  4. ajax请求头添加参数
  5. PostgreSQL中的row_number() 与distinct用法说明
  6. java环境变量(Windows 11)
  7. 隐藏来源 禁用Referrer 的方法
  8. C# Post调用接口并传递json参数
  9. djangoDRF查询
  10. ssh操作