Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 比较JS中的两个对象属性_Javascript_Object - Fatal编程技术网

Javascript 比较JS中的两个对象属性

Javascript 比较JS中的两个对象属性,javascript,object,Javascript,Object,我需要比较两个对象,找出缺少的属性。 这些物体相当大,有几个层次 我将给出对象类型的简短示例: UC = {}; UC.start = {} UC.start.enableHardEccDecline = ''; UC.start.template = {}; UC.start.template.ecc = ''; UC.start.template.decline = {}; UC.start.template.decline.title

我需要比较两个对象,找出缺少的属性。 这些物体相当大,有几个层次

我将给出对象类型的简短示例:

    UC = {};
    UC.start = {}
    UC.start.enableHardEccDecline = '';
    UC.start.template = {};
    UC.start.template.ecc = '';
    UC.start.template.decline = {};
    UC.start.template.decline.title = '';
    UC.start.template.decline.body = '';
    UC.general = {};...

这是一个示例对象。我需要比较的只是属性。我不在乎价值。我会将此对象与另一个非常类似的对象进行比较,但可能缺少一些属性。

如果您的情况允许,我建议使用库,而不是滚动您自己的解决方案(或查看它们的实现)。在JS中,深度对象比较有时并不简单。 如果您决定推出自己的解决方案,您将递归地遍历属性,并逐个比较它们(忽略本机/内置对象属性,可能从某个原型继承)

如果您愿意,我很乐意详细说明。

函数比较(基本、比较、深度搜索){
var缺失=[];
var comparePro=函数(baseValue、comparedValue、path、deepSearch){
//console.log('comparing',path.join('.');
如果(比较值===未定义){
console.log('missing key',path.join('.');
如果(!深度搜索){
返回;
}
}
if(typeof baseValue==='object'){
Object.keys(baseValue).forEach(函数(key){
comparePro(baseValue[key],comparedValue&&comparedValue[key],path.concat(key),deepSearch);
}); 
}
};
Object.keys(base).forEach(function(key){
ComparePro(基本[键]、比较[键]、[键]、深度搜索);
});
}
UC={};
UC.start={}
UC.start.enablehardeccdevent='';
UC.start.template={};
UC.start.template.ecc='';
UC.start.template.decept={};
UC.start.template.denced.title='';
UC.start.template.decept.body='';
UC.general={};

比较(UC,{},true)我刚刚在这里做了一个简单的示例,不确定您希望如何应用它,但我已将缺少的项添加到一个数组中,该数组正在记录它

Obj1应该是您的标准比较对象,obj2应该是从请求中收到的对象

var obj1 = {};
obj1.test1 = 0;
obj1.test2 = 0;
obj1.test2222 = 0;
obj1.testLoremIpsum = 0;
obj1.lalala = 0;

var obj2 = {};
obj2.test1 = 0;
obj2.test25 = 0;
obj2.lalala1 = 0;

var k , i = 0;
var missingProps = [];

for( i in obj1 )
{
    var isFound = false;
    for( k in obj2) if( i == k ) isFound = true;
    if(!isFound) missingProps.push( i );
}
console.log(missingProps);

如何使用
JSON.stringify
将对象转换为字符串,然后进行字符串比较:

JSON.stringify(UC) === JSON.stringify(UCToBeCompared)

通过使用此方法,您必须确保对象没有,否则
JSON.stringify
将引发异常

我在这里做了一个示例。希望它能解决你的问题。它将仅比较对象
,并返回与比较对象不存在的对象键

var a = Object.keys(obj1);
var b = Object.keys(obj2);

var missing= a.filter(function(v){
    return b.indexOf(v)==-1;
})

console.log(missing);

你会用这个比较做什么?我们可以根据您的需要提供解决方案,更多关于您最终目标的信息将有所帮助。您是否希望这是n级检查?因此,从服务器发送一个对象,并携带多个字符串以用于html内容。如果某些属性丢失,我需要停止代码,显示一个错误页面,并显示所有丢失的属性。这段代码将只深入1级。示例数据有更多级别。是的,我没有注意到。将修改。谢谢不,那不行,因为我需要知道丢失的属性。