function isEqual(obj1, obj2) {
     // 先判断这俩是不是对象或者数组类型的
     if ((typeof (obj1) !== "object" && obj1 !== null) || (typeof (obj2) !== "object" && obj2 !== null)) {
         return obj1 === obj2
     // 如果特意传的就是两个指向同一地址的对象
     if (obj1 === obj2) {
         return true
     // 如果key的个数都不一样那么肯定不能相等 return false
     let obj1key = Object.keys(obj1)
     let obj2key = Object.keys(obj2)
     if (obj1key.length !== obj2key.length) {
         return false
     for (key in obj1) {
         if (!isEqual(obj1[key], obj2[key])) {
             return false
     return true
                    function isEqual(obj1, obj2) {     // 先判断这俩是不是对象或者数组类型的     if (typeof (obj1) !== "object" && obj1 !== null && typeof (obj2) !== "object" && obj2 !== null) {         return obj1 === obj2     }     // 如果特意传的就是两个指向同一地址的对象     i.
				
// 实现效果 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 正常情况下,两个对象是不可能相等的,虽然 键 和 值 一样,因为他们有着不同的内存指向,实现 isEqual 函数 var re.
观察者需要放到被观察者中,被观察者的状态变化需要通知观察者 我变化了 内部也是基于发布订阅模式,收集观察者,状态变化后要主动通知观察者 实现一个链表结构 链表结构看图理解next层级 参考前端手写面试题详细解答第一版 时间复杂度为 O(n^2) 第二版 标记法 / 自定义属性法 时间 此篇包括但不仅限于对前一篇博客知识点的补充 1.手写深度比较,模拟lodash isEqual 关于深度比较的理解:如果obj1和obj2的属性、值全部相等,但是令他们 = = =的时候,还是返回false,因为他们的地址不同,深度比较就是能对两个地址不同,值相同的对象进行比较,返回true。 function isObject(obj){ return typeof obj === 'object' && obj !== null; function isEqual(o function isEqual(obj1, obj2) { if (!isObject(obj1) || !isObject(obj2)) { // 值类型(注意,参与 equal 的一般不会是函数) return obj1 === obj2
使用lodash比较两个json数组的差异在使用jqgrid的本地数据模式时,需要实现本地数据的增删改功能,保存数据时就需要对原始的json数组和最新的json数组作比较,此时可以使用lodash.js的比较方法。注意:引用lodash时,需要引用lodash.js,不能引用lodash.core.js,因为后者不包含本文中所使用的方法具体方法如下: 假如object包含两个属性,varName和
什么是深度比较 lodash.isEqual : 比较对象的键值对,都一样则为true,反之false; 其中,若对象的属性值是引用类型,比较的是实际值不是地址(当然,若地址是一样的,那么肯定相等,return true); 默认不会比较函数 1.不是对象,直接返回比较结果,return === 2. 地址相等对象 return true 3. 两个都是对象||数组 (1)比较两对象keys的个数 (2)以obj1的key为基准,和obj2依次递归比较 function isEqual (