使用ES6实现对象深拷贝和判断两个对象是否相等
1、deepClone
export function deepClone(value) {
if (Array.isArray(value)) {
return value.map(deepClone)
} else if (value && typeof value === 'object') {
var res = {};
for (var key in value) {
res[key] = value[key]
}
return res
} else {
return value
}
}
这是vue源码中实现深拷贝的方式,使用map函数
2、判断两个对象事都完全相等的方式
export function isObjectEqual(a, b) {
if (a === void 0) a = {};
if (b === void 0) b = {};
// 如果两个值都是布尔值的话进行判断
if (!a || !b) { return a === b }
// 将对象中的键存在数组中,然后根据数组的长度来判断是否有相同的数量的键值对。
var akeys = Object.keys(a)
var bkeys = Object.keys(b)
if (akeys.length !== bkeys.length) {
return false;
}
// 使用every循环进行值得比较
return akeys.every(function(key) {
var aVal = a[key];
var bVal = b[key];
// 如果是深层次得对象或者数组继续递归调用
if (typeof aVal === 'object' && typeof bVal === 'object') {
return isObjectEqual(aVal, bVal)
}
// 如果不是对象或者数组得话,是字符串。则直接进行比较
return String(aVal) === String(bVal)
})
}
在浏览器中已经自测飞行那个好用