javascript如何仅比较键而不是json的值
我有两个嵌套的JSON对象
//Json object1
{
"version": "1",
"user": {
"id": 123
}
}
//Json object2 =
{
"version": "1",
"user": {
"i": 123
}
}
1)它只应在比较期间检查键,而不检查值。所以上面应该返回false,下面应该返回true2)它还应遵循user.id与id相同的结构。
//Json object1
{
"version": "1",
"user": {
"id": 123
}
}
//Json object2
{
"version": "1",
"user": {
"id": 12
}
}
我已经尝试过以下代码,但无济于事
exportspareObjects = async(model, response) => {
switch (Object.prototype.toString.call(model)) {
case '[object]':
var x;
var mKeys = Object.keys(model);
for (x in mKeys) {
return thispareObjects(Object.keys(model)[x], Object.keys(response)[x]);
}
break;
case '[object Object]':
var x1;
var mKeys1 = Object.keys(model);
for (x1 in mKeys1) {
return thispareObjects(Object.keys(model)[x1], Object.keys(response)[x1]);
}
break;
case '[object Array]':
return thispareObjects(model[0], response[0]);
// case '[object String]':
// return model === response;
default:
return true;
}
};
回答如下:也许您可以通过此行修复它
return thispareObjects(Object.keys(model)[x1], Object.keys(response)[x1]);
代替做
return thispareObjects(model[x1], response[x1]);
我会这样做1.您只需要比较对象(所有其他都没有键)2.如果值也是对象则递归
function compare(obj,model){
let keys=Object.keys(model)
let thisLevelOK=true
for (let key in keys.length){
if (obj[key]===undefined){
thisLevelOK=false
break
} else if (model[key].toString()=="[object Object]" && compare(obj[key],model[key])==false){
thisLevelOK=false
break
}
}
//in case obj has more keys then model
thisLevelOK=thisLevelOK && compare(model,obj)
return thisLevelOK
}