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级。示例数据有更多级别。是的,我没有注意到。将修改。谢谢不,那不行,因为我需要知道丢失的属性。