如何比较JavaScript中的两个对象并返回差异
我有两个对象,我想比较新旧对象,如果对象的值不同,则返回新对象。我尝试了多种解决方案,但似乎无法实现。 这是我尝试过的如何比较JavaScript中的两个对象并返回差异,javascript,arrays,node.js,json,javascript-objects,Javascript,Arrays,Node.js,Json,Javascript Objects,我有两个对象,我想比较新旧对象,如果对象的值不同,则返回新对象。我尝试了多种解决方案,但似乎无法实现。 这是我尝试过的 var new_pkg ={scooter_id:"TM0060",lat:"45.747646",lng:"21.231496",alt:"99.200"}; var old_pkg={scooter_id:"TM0060",lat:"25.747746",lng:"31.221496",alt:"100.200"}; function differenc
var new_pkg ={scooter_id:"TM0060",lat:"45.747646",lng:"21.231496",alt:"99.200"};
var old_pkg={scooter_id:"TM0060",lat:"25.747746",lng:"31.221496",alt:"100.200"};
function difference(new_pkg, old_pkg) {
function changes(new_pkg, old_pkg) {
return _.transform(new_pkg, function(result, value, key) {
if (!_.isEqual(value, old_pkg[key])) {
result[key] = (_.isObject(value) && _.isObject(old_pkg[key])) ? changes(value, old_pkg[key]) : value;
}
});
}
return changes(new_pkg, old_pkg);
}
我想返回
{lat:“45.747646”,lng:“21.231496”,alt:“99.200”}代码>您可以按键比较对象值,如果存在差异,则返回差异对象:
var new_pkg={scooter_id:“TM0060”,lat:“45.747646”,lng:“21.231496”,alt:“99.200”};
var old_pkg={机车id:“TM0060”,lat:“25.747746”,lng:“31.221496”,alt:“100.200”};
const getNew=(newObj,oldObj)=>{
if(Object.keys(oldObj).length==0
&&Object.keys(newObj).length>0)
返回newObj;
设diff={};
for(旧对象中的常量键){
if(newObj[key]&&oldObj[key]!=newObj[key]){
diff[key]=newObj[key];
}
}
if(对象键(差异).length>0)
返回差;
返回oldObj;
}
log(getNew(new_-pkg,old_-pkg))代码>它们总是具有相同属性的对象吗?像模特吗
如果是这样,那么您可以通过其中一个循环并比较给定键处的值
var new_pkg={scooter_id:“TM0060”,lat:“45.747646”,lng:“21.231496”,alt:“99.200”};
var old_pkg={机车id:“TM0060”,lat:“25.747746”,lng:“31.221496”,alt:“100.200”};
函数GetAnewoneiPropChanged(旧的、新的){
用于(旧道具中的道具){
如果(旧的[prop]!==新的[prop]){
返回newOne;
}
}
返回旧版本;
}
log(getanewoneipropchanged(旧包装,新包装))代码>试试这个:
var new_pkg={scooter_id:“TM0060”,lat:“45.747646”,lng:“21.231496”,alt:“99.200”};
var old_pkg={机车id:“TM0060”,lat:“25.747746”,lng:“31.221496”,alt:“100.200”};
功能比较BJ(obj1、obj2){
//创建属性名称数组
var obj1Props=Object.getOwnPropertyNames(obj1);
var obj2Props=Object.getOwnPropertyNames(obj2);
//如果属性的数量不同,
//对象不是等价的
if(obj1Props.length!=obj2Props.length){
返回false;
}
用于(obj1Props的var i){
if(obj1[i]!==obj2[i]){
返回false;
}
}
//如果我们走到这一步,物体
//它们被认为是等价的
返回true;
}
if(比较bj(旧包装、新包装)==false){
console.log(新包装);
}如果您想通过使用内置库比较两个对象,以便可以接触到使用npm install deep diff
,则
可能与的重复。如果oldObj
为空怎么办?此算法不会包含仅在newObj中的diff属性。@matvs正如Op所说:如果对象的值不同,我想比较新旧并返回新的属性。
@hussain.codes感谢您的精彩捕获。我已经添加了这个案例。@florinstefan8830我很高兴能帮助您!:)