通过JS深度判断两个对象字段相同
程序员文章站
2023-12-03 15:35:40
代码:
/**
* 判断此对象是否是object类型
* @param {object} obj
*/
function isobject(obj)...
代码:
/** * 判断此对象是否是object类型 * @param {object} obj */ function isobject(obj){ return object.prototype.tostring.call(obj)==='[object object]'; }; /** * 判断此类型是否是array类型 * @param {array} arr */ function isarray(arr){ return object.prototype.tostring.call(arr)==='[object array]'; }; /** * 深度比较两个对象是否相同 * @param {object} olddata * @param {object} newdata */ function equalsobj(olddata,newdata){ // 类型为基本类型时,如果相同,则返回true if(olddata===newdata)return true; if(isobject(olddata)&&isobject(newdata)&&object.keys(olddata).length === object.keys(newdata).length){ // 类型为对象并且元素个数相同 // 遍历所有对象中所有属性,判断元素是否相同 for (const key in olddata) { if (olddata.hasownproperty(key)) { if(!equalsobj(olddata[key],newdata[key])) // 对象中具有不相同属性 返回false return false; } } }else if(isarray(olddata)&&isarray(olddata)&&olddata.length===newdata.length){ // 类型为数组并且数组长度相同 for (let i = 0,length=olddata.length; i <length; i++) { if(!equalsobj(olddata[i],newdata[i])) // 如果数组元素中具有不相同元素,返回false return false; } }else{ // 其它类型,均返回false return false; } // 走到这里,说明数组或者对象中所有元素都相同,返回true return true; };
测试:
var oldarr = [1,2, [ { name:"张三", age:11, } ], { name:'李四', age:21, em:[ { address:'邯郸', phone:'123' }, { address:'北京', phone:234 } ] } ]; var newarr = [1,2, [ { name:"张三", age:11 } ], { name:'李四', age:21, em:[ { address:'邯郸', phone:'123' }, { address:'北京', phone:234 } ] } ]; console.log(equalsobj(oldarr,newarr));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。