[js函数] shallowEqual
2024-09-08 18:44:33
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
}
最新文章
- mac 下配置 git
- 01-C#入门(函数重载、委托)
- 用word-break: break-all解决不正确换行问题
- sql apply
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- C#调用Web Service时的身份验证
- localStrorage、 sessionStorage 、cookie
- (转载)XML Tutorial for iOS: How To Read and Write XML Documents with GDataXML
- iOS获取运营商信号强度
- NameNode和SecondaryNameNode工作原理剖析
- openssl中RSA数字签名的使用
- bash计算上下行数据差值
- jdbc--取大量数据
- synchronized(二)
- 2018.4.23 git命令总结
- Hibernate 抓取策略
- QT5 QSS
- hbase源码系列(十四)Compact和Split
- SQL Server中搜索特定的对象
- fdisk -l不显示磁盘信息的问题