递归判断两个对象属性值是否相等

  • 方法
function isObjectValueEqual (a, b) {
        //取对象a和b的属性名
        var aProps = Object.getOwnPropertyNames(a);
        var bProps = Object.getOwnPropertyNames(b);
        if (aProps.length != bProps.length) {
            return false;
        }
        //循环取出属性名,再判断属性值是否一致
        for (var i = 0; i < aProps.length; i++) {
            var propName = aProps[i];
            var type = typeof a[propName];
            if(type === 'object'){
                //值是对象类型就递归
                if(!isObjectValueEqual(a[propName],b[propName])){
                    return false;
                }
            }else{
                if(a[propName] !== b[propName]) {
                    return false;
                }
            }
        }
        return true
    }
JavaScript
  • 应用场景
    用于判断对象中的属性值是否发生变化,从而决定下次是否更新对象,例如Excel导入到table中,可能的情况有:
  1. Excel中有新的数据增加到table中。
  2. Excel中的部分数据已经在table中且没有变化,不做任何操作。
    3.Excel中的部分数据虽然在table中但每行记录(对象)中的部分属性已经改变,此时需要判断对象属性值是否新旧是否一样从而是否进行更新操作。
最后修改:2022 年 02 月 17 日
如果觉得我的文章对你有用,请随意赞赏