递归判断两个对象属性值是否相等
- 方法
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
}
- 应用场景
用于判断对象中的属性值是否发生变化,从而决定下次是否更新对象,例如Excel导入到table中,可能的情况有:
- Excel中有新的数据增加到table中。
- Excel中的部分数据已经在table中且没有变化,不做任何操作。
3.Excel中的部分数据虽然在table中但每行记录(对象)中的部分属性已经改变,此时需要判断对象属性值是否新旧是否一样从而是否进行更新操作。