已知兩純對象數組
let a = { a: 1, b: 2 }; let b = { a: 1, b: 2 };
咱們都知道 a == b ,返回 false ,咱們要如何寫一個方法,使得鍵值對都是同樣的則認爲兩個對象是相等的?prototype
方法以下:code
let equalObject = (o1, o2) => { //判斷兩變量類型是否一致 若是沒有這個判斷 [1, 2], { '0': 1, '1': 2 } 會返回true; if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) { return false; } if (!(o1 instanceof Object) || !(o2 instanceof Object)) { return false; } if (Object.keys(o1).length !== Object.keys(o2).length) { return false; } return Object.keys(o1).every(v => o1[v] === o2[v]); };
若是兩對象是數組,equalObject(arr1,arr2) 方法一樣適用;對象
實現一個方法,只要內容形態一致,則任務數組或對象相等,例如:變量
let a = { a: [1, '2'], b: 2 }; let b = { b: 2, a: [1, '2'] };
方法以下:方法
let equal = (o1, o2) => { if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) { return false; } if (!(o1 instanceof Object) || !(o2 instanceof Object)) { return false; } if (Object.keys(o1).length !== Object.keys(o2).length) { return false; } return Object.keys(o1).every(v => { if (o1[v] instanceof Object) { return equal(o1[v], o2[v]); } else { return o1[v] === o2[v]; } }); }; equal({ a: [1, '2'], b: 2 }, { b: 2, a: [1, '2'] }) //true