javascript - 如何使用 jquery 或 javascript 重新定位 JSON 中对象的键

标签 javascript jquery json

我有两个需要比较的对象。但是对象中键的位置存在问题。

var obj1 = [{
    Name : abc;
    age : 23;
}, {
    Name : def;
    age : 222;
}]

var obj2 = [{
    age : 23;
    Name: abc;
}, {
    age : 222;
    Name : def;
}]

我尝试过使用以下方法,但失败了。

(JSON.stringify(obj1) == JSON.stringify(obj2))

有没有办法交换对象中迭代整个对象的键的位置?我期待这样的事情

var obj1 = [{
    Name : abc;
    age : 23;
}, {
    Name : def;
    age : 222;
}]

var obj2 = [{
    Name : abc;
    age : 23;
}, {
    Name : def;
    age : 222;
}]

最佳答案

对象的键(无序)与数组的索引(有序)不同。要比较两个对象数组并查看它们的每个数组元素中是否具有相同的对象(具有相同的键/值对),您可以尝试以下操作:

function compareArrayOfObjects(array1, array2) {
  return array1.reduce(function(bool, obj, index) {
    return bool && array2[index] && isEqual(obj, array2[index]);
  }, array1.length === array2.length);
}

如果您只需要比较像数字和字符串这样简单的值,您可以实现 isEqual(),如下所示:

function isEqual(a, b) {
  var aKeys = Object.getOwnPropertyNames(a);
  var bKeys = Object.getOwnPropertyNames(b);

  return aKeys.reduce(function(bool, aKey) {
    return bool && (a[aKey] === b[aKey]);
  }, aKeys.length === bKeys.length);
}

如果您需要深度对象比较,那么您可能需要 _.isEqual() 的 LoDash 实现。

将它们放在一起,您将拥有

    var obj1 = [{
      Name: 'abc',
      age: 23
    }, {
      Name: 'def',
      age: 222
    }];

    var obj2 = [{
      age: 23,
      Name: 'abc'
    }, {
      age: 222,
      Name: 'def'
    }];
    var obj3 = [{}, {}];
    
    function compareArrayOfObjects(array1, array2) {
      return array1.reduce(function(bool, obj, index) {
        return bool && array2[index] && isEqual(obj, array2[index]);
      }, array1.length === array2.length);
    }

    function isEqual(a, b) {
      var aKeys = Object.getOwnPropertyNames(a);
      var bKeys = Object.getOwnPropertyNames(b);

      return aKeys.reduce(function(bool, aKey) {
        return bool && (a[aKey] === b[aKey]);
      }, aKeys.length === bKeys.length);
    }
    console.log('obj1 and obj2 is the same (expected true): ' + compareArrayOfObjects(obj1, obj2));
    console.log('obj1 and obj3 is the same (expected false): ' + compareArrayOfObjects(obj1, obj3));

关于javascript - 如何使用 jquery 或 javascript 重新定位 JSON 中对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42900395/

相关文章:

python - 未定义 jsonify - 内部服务器错误

javascript - 如何使用 live 和 jqueryeach

javascript - 切换元素可见性的 Angular Directive(指令)

jquery - ASP.NET Core 3.1 中的数据表服务器端处理

jquery - $(window).unload 未触发

javascript - api 调用运行次数意外

javascript - 改善大对象数组上的循环

javascript - 当用户将鼠标悬停在图像上时,如何向用户实时显示图像上的 (x,y) 坐标?

javascript - Backbone.js 如何连接 View 和 Model

javascript - 插入标记而不丢失 jQuery Mobile 样式