現在有兩個對象:
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 }
記錄一下我的實現過程,參考參考~~