Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较JavaScript中的两个对象并返回差异_Javascript_Arrays_Node.js_Json_Javascript Objects - Fatal编程技术网

如何比较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我很高兴能帮助您!:)