最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript如何仅比较键而不是json的值

网站源码admin14浏览0评论

javascript如何仅比较键而不是json的值

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
}

发布评论

评论列表(0)

  1. 暂无评论