现在有两个对象:
let a = {name: 'zj', tel: '123', sex: 0, id: 1}
let b = {name: 'zj', tel: '123', sex: 0, id: 1}
如何判断对象a和对象b相等呢?
a==b //false
Object.is(a,b) //false
这个时候需要自己定义一个方法来判断对象内容值是否相等,代码如下:
function objEqual(a, b) { if (Object.keys(a).length !== Object.keys(b).length) { return false } for (let key in a) { if (b[key] === undefined) { return false } if (a[key] !== b[key]) { return false } } return true }
但是,如果涉及到对象内部还存在复式结构的,比如:
let c = {name: 'zj', tel: '123', sex: 0, id: 1, obj: {name: '111'}}
let d = {name: 'zj', tel: '123', sex: 0, id: 1, obj: {name: '1111'}}
这样如何解决呢?
回答:采用嵌套就可以啦~~
代码如下:
function objEqual(a, b) { if (Object.keys(a).length !== Object.keys(b).length) { return false } for (let key in a) { if (b[key] === undefined) { return false } if (typeof(b[key]) === 'function' || typeof(a[key]) === 'function') { throw new Error('type error') } if (typeof(b[key]) != typeof(a[key])) { return false } if (typeof(a[key]) === 'object') { return objEqual(a[key], b[key]) } if (a[key] !== b[key]) { return false } } return true }
记录一下我的实现过程,参考参考~~