- 此问题在此处已有答案**:
How to compare arrays in JavaScript?(60个答案)
(9个答案)
1年前关闭。
我开始说:
"1:2".split(':') == ["1","2"];
// false
然后尝试:
[1,2] == [1,2];
// false
最终:
[] == [];
// false
我后来发现:
"1:2".split(':').toString() == [1,2].toString();
// true
所以我已经解决了我最初的问题(有点),但是为什么数组不能相互匹配呢?
6条答案
按热度按时间rryofs0p1#
Javascript数组是对象,你不能简单地使用相等操作符
==
来了解这些对象的 * 内容 * 是否相同。相等操作符只会测试两个对象是否实际上是完全相同的示例(例如myObjVariable==myObjVariable
,也适用于null
和undefined
)。如果你需要检查两个数组是否相等,我建议你只遍历两个数组,并验证所有的元素是否有相同的值(以及两个数组是否有相同的长度)。
关于自定义对象的相等性,我会构建一个特定的
equals
函数,并将其添加到类的原型中。考虑到最后将两个数组都转换为
String
并测试结果字符串的相等性,有一天可以考虑使用类似但更通用的技术,您会发现在许多地方都有描述:好吧,不要。
如果属性的顺序对于那些对象示例总是相同的话,这是可行的,但是这会给那些难以追踪的极其讨厌的错误留下隐患。总是倾向于更明确的方法,并且只写一个干净的可读的函数来测试所有必需字段的相等性。
azpvetkf2#
在Javascript中,对象的
==
运算符只检查对象是否是相同的实际对象引用,而不是它们是否是包含相同内容的两个独立对象。没有内置运算符来检查它们是否包含相同内容。您必须自己编写一个函数来进行此类比较。字符串转换是比较两个数组的一种方法,只要数组元素只包含基元值(不包含其他对象)。如果数组元素可以包含其他元素,那么您必须确保这些对象本身也被转换为代表性字符串。
而且,转换为字符串时无法区分包含
"4"
的数组元素和包含4
的数组元素,因为在字符串表示形式中,两者都转换为"4"
。仅供参考,您可以阅读关于记录和元组的答案,这两种新的数据类型将出现在未来的Javascript中,它将允许通过值来比较数组和对象的不可变版本,而不仅仅是比较它们是否是同一个对象。
7nbnzgx93#
对象的相等性将告诉您这两个对象是否是同一个。
您必须循环遍历数组,以查看它们是否具有相同的元素。
参见:How to check if two arrays are equal with JavaScript?
uurity8g4#
在javascript中,每个
[]
都是window.Array
类的一个示例,所以你基本上是在尝试比较两个不同的对象,因为数组可以有任何数量和任何类型的元素,包括对象和自定义对象,而那些嵌套的数组又可以有许多属性和数组等等。当涉及到比较时,它变得模棱两可,你永远不会确定你想对那些对象和嵌套属性做什么。所以你试图通过比较来达到的目的可以用很多其他的方法来实现。你只需要找出适合你的情况的正确方法。
yzxexxkh5#
一种方法是创建自己的
Array
检查函数:快!
另一种方法是用
.join()
将Array
转换为String
,然后比较字符串,再用.split()
将它们转换回Array
。mfpqipee6#
如果我把这个问题和Python中的问题联系起来:
输入:
案例一:
输出:["1","2","3","4"]
案例二:
输出:[1,2,3,4]
因此,错误是类型的错误,因为它可能会为以下情况得出aa 'true':