js怎麼判斷兩個物件相等?
阿新 • • 發佈:2022-03-27
ES6 中有一個方法判斷兩個物件是否相等,這個方法判斷是兩個物件引用地址是否一致
let obj1= {
a: 1
}
let obj2 = {
a: 1
}
console.log(Object.is(obj1, obj2)) // false
let obj3 = obj1
console.log(Object.is(obj1, obj3)) // true
console.log(Object.is(obj2, obj3)) // fals
當需求是比較兩個物件內容是否一致時就沒用了
想要比較兩個物件內容是否一致,思路是要遍歷物件的所有鍵名和鍵值是否都一致:
1、判斷兩個物件是否指向同一記憶體
2、使用 Object.getOwnPropertyNames 獲取物件所有鍵名陣列
3、判斷兩個物件的鍵名陣列是否相等
4、遍歷鍵名,判斷鍵值是否都相等
let obj1 = { a: 1, b: {c: 2} } let obj2 = { b: {c: 3}, a: 1 } function isObjectValueEqual(a, b) { // 判斷兩個物件是否指向同一記憶體,指向同一記憶體返回 true if (a === b) return true // 獲取兩個物件鍵值陣列 let aProps = Object.getOwnPropertyNames(a) let bProps = Object.getOwnPropertyNames(b) // 判斷兩個物件鍵值陣列長度是否一致,不一致返回 false if (aProps.length !== bProps.length) return false // 遍歷物件的鍵值 for (let prop in a) { // 判斷 a 的鍵值,在 b 中是否存在,不存在,返回 false if (b.hasOwnProperty(prop)) { // 判斷 a 的鍵值是否為物件,是則遞迴,不是物件直接判斷鍵值是否相等,不相等返回 false if (typeof a[prop] === 'object') { if (!isObjectValueEqual(a[prop], b[prop])) return false } else if (a[prop] !== b[prop]) { return false } } else { return false } } return true } console.log(isObjectValueEqual(obj1, obj2)) // false