繁体   English   中英

Javascript-当两个数组包含一个对象和一个数组时,检查两个数组是否相等

[英]Javascript - Check if two arrays are equal when arrays contain an object and an array

可以说我有一个内部结构如下的数组:

applications = [
    {
        source : {},
        highlight : []
    },
    {
       source : {},
       highlight : []
    },

    // More objects with same structure as objects above. 
]

有时,数组结构可能如下所示:

  applications = [
    {
        source : {}
    },
    {
       source : {}
    },

    // More objects with same structure as objects above. 
]

«NB»来源和突出显示内容,但现在显示在此处。

进一步说,我想比较上面的两个数组(包含内容)。 我想具体检查一下是否相等。

为此,一个著名的功能是:

arraysEqual(arr1, arr2) {
    if (arr1.length !== arr2.length)
        return false;
    for (var i = arr1.length; i--;) {
        if (arr1[i] !== arr2[i])
            return false;
    }
    return true;
}

我想确定的是,此函数是否可以帮助我确定数组是否相等?

这是简单的方法

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

您确定的arraysEqual函数的问题在于,只有在arr1和arr2中的项目为字符串或数字(或布尔值)类型(即{source:1}为!= {source:1}时,它才可以工作,因为尽管它们具有相同的内容,它们是不同的对象。

使用Lodash方法_.isEqual可以选择:

var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false

好处:

  • 可信赖的
  • 进行深入比较
  • 如果您不想加载整个库,则可以仅添加此方法

我不喜欢将Lodash用于所有内容,而通常在Vanilla JS中使用它,但是在这些情况下,我认为值得使用一个库。

如果您在谈论浅等式,则可以使用该函数(例如,在比较['a',4,'b']之类的数组时)。

但是,这并不是您想要的,因为数组中的数据由对象和数组组成(根据您的示例)。

如果希望每个数组中的数据完全相同,则需要深度相等(即,递归比较深度中的所有值,对象和数组)。 您可以自己实现此功能,但如有可能,请使用underscore之类的第三方库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM