// 实现效果
let a = { name: 'zfb', age: 18, major: { main: 'math', other: 'chinese'} }
let b = { name: 'zfb', age: 18, major: { main: 'math', other: 'chinese'} }
console.log(a === b) // false
Unter normalen Umständen können zwei Objekte nicht gleich sein, obwohl der Schlüssel und der Wert gleich sind, da sie unterschiedliche Speicherzeiger haben, ist die Funktion isEqual implementiert
var result = isEqual(a, b)
console.log(result) // true
Code:
Vorkenntnisse: Object.keys ()
Wenn das Objekt übergeben wird, geben Sie das Schlüsselarray des Objekts zurück. Wenn das übergebene ein Array ist, geben Sie das Index-Index-Array zurück
let c = { name: 'zfb', age: 18, major: { main: 'math', other: 'chinese'} }
console.log(Object.keys(c)) // ["name", "age", "major"]
let arr = ['1', '2', '3']
console.log(Object.keys(arr)) // ["0", "1", "2"]
Code:
// 判断是否是对象或者数组
function isObject(obj) {
return typeof obj === 'object' && obj !== null
}
function isEqual (obj1, obj2) {
// 参数有一个不是对象 直接判断值是否相等就行
if (!isObject(obj1) || !isObject(obj2)) {
return obj1 === obj2
}
// 如果两个数都是数组或者对象
// 1. 先比较keys的个数,如果个数不相同 直接就不想等了
var obj1Keys = Object.keys(obj1)
var obj2Keys = Object.keys(obj2)
if (obj1Keys.length !== obj2Keys.length) {
return false
}
// 如果个数相同再以obj1为基准 和 obj2依次递归比较
// for...in 适用于对象,也适用于数组
for (let key in obj1) {
const res = arguments.callee(obj1[key], obj2[key]) // 递归
if (!res) {
return false
}
}
return true
}
Geeignet für Arrays und Objekte