Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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/6/apache/9.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:比较两个JSON对象的结构,同时忽略它们的值_Javascript_Json_Comparison - Fatal编程技术网

JavaScript:比较两个JSON对象的结构,同时忽略它们的值

JavaScript:比较两个JSON对象的结构,同时忽略它们的值,javascript,json,comparison,Javascript,Json,Comparison,我使用基于Node.js的模拟服务器来指定和模拟来自后端的API响应。对后端和前端是否都符合规范进行某种检查将非常有帮助。为了做到这一点,我需要某种方法来比较两个JSON对象的结构 例如,应将这两个对象视为相等: var object1 = { 'name': 'foo', 'id': 123, 'items' : ['bar', 'baz'] } var object2 = { 'name': 'bar', 'items' : [], 'id'

我使用基于Node.js的模拟服务器来指定和模拟来自后端的API响应。对后端和前端是否都符合规范进行某种检查将非常有帮助。为了做到这一点,我需要某种方法来比较两个JSON对象的结构

例如,应将这两个对象视为相等:

var object1 = {
    'name': 'foo',
    'id': 123,
    'items' : ['bar', 'baz']
}

var object2 = {
    'name': 'bar',
    'items' : [],
    'id': 234
}
你知道我该怎么做吗?

你可以使用函数,检查object1的每个属性名,它是否在object2中:

function hasSameProperties(obj1, obj2) {
  return Object.keys(obj1).every( function(property) {
    return obj2.hasOwnProperty(property);
  });
}

这是一个优雅的解决方案。你可以这样简单地做:

var equal = true;
for (i in object1) {
    if (!object2.hasOwnProperty(i)) {
        equal = false;
        break;
    }
}
如果这两个元素具有相同的属性,那么var
equal
必须保持
true

作为功能:

function compareObjects(object1, object2){
    for (i in object1)
        if (!object2.hasOwnProperty(i))
            return false;
    return true;
}

我认为这篇文章可能会帮助你:最好的评论这是一个很好的起点。这里的问题是,它不适用于嵌套对象或数组。我扩展了嵌套对象的解决方案,但如果数组的长度不同,它们仍然存在问题: