【问题标题】:Compare Two arrays for equality if they have nested objects in Jquery比较两个数组是否相等,如果它们在 Jquery 中有嵌套对象
【发布时间】:2015-06-25 13:20:27
【问题描述】:

我有两个数组,每个数组有 5 个对象。在继续之前,我想检查这两个数组是否相等。我尝试寻找答案,但不幸的是找不到具有多个对象的嵌套数组的任何内容。 有没有办法做到这一点?

例如。 Array1 ==> 5 个嵌套对象 Array2 ==> 5 个嵌套对象

现在检查 Array1 == Array2 并返回一个布尔值。

【问题讨论】:

  • 您自己尝试过什么吗?如果是这样,请向我们展示代码
  • 你需要单独比较对象比较index 0index 0比较每个对象的所有attributes是否相等...
  • 对象是否需要顺序一致?
  • 你应该为你的objects定义一个equals方法。

标签: javascript jquery arrays


【解决方案1】:

你可以不使用 jQuery 来实现 - 使用全局可用的JSON.stringify 方法将它们更改为字符串,然后比较会很容易:

JSON.stringify(arr1) === JSON.stringify(arr2);

种黑客。但它确实运作良好。在 Angular 框架通过在其函数上运行 toString() 然后正则表达式来检查其注入的时代(哦,是的),我认为这只是一个有效的解决方案;)

【讨论】:

  • 是的。我在某处读到,将它们转换为字符串不是一个好习惯。虽然不知道原因..
  • 默认情况下没有不好的做法。在这种情况下,这是一个有效的解决方案,在其他情况下,它可能是不好的做法。我的观点是,这是主观的,完全取决于具体情况。
  • 是的.. 工作就像一个魅力... :)
  • 这取决于您的对象结构。我知道的唯一缺点是它无法将日期对象从字符串值改回,并且您最终会丢失对象的自定义方法。
【解决方案2】:
var arr1 = [{val: 1}, {val: 2}, {val: 3}, {val: 4}, {val: 5}]
var arr2 = [{val: 1}, {val: 2}, {val: 3}, {val: 4}, {val: 5}]
var arr3 = [{val: 1}, {val: 2}, {val: 3}, {val: 9}, {val: 5}]

function isEqual(arr1, arr2) {

    // If the array lengths are different, return false
    if (arr1.length !== arr2.length) return false;

    // Grab an array of true/false values determined
    // by the result of the `some` callback
    // Return false if `false` is found in the array, otherwise true
    return arr1.map(function (one) {
        return arr2.some(function (two) {
            return two.val === one.val;
        });
    }).indexOf(false) > -1 ? false : true;
}


isEqual(arr1, arr2); // true
isEqual(arr1, arr3); // false

DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多