为什么不能将两个包含“ includes”的数组进行比较?

时间:2019-03-14 11:03:40

标签: javascript arrays node.js

JavaScript不允许使用includes来比较数组?

请参见以下示例:

let x = [[1,2], [3,4]]
let y = x[0]
let z = [1,2]

console.log(y,z)
// Output: [ 1, 2 ] [ 1, 2 ]
console.log(x.includes(y), x.includes(z))
// Output: true false 

我想让x.includes(z)成为true

这些注释使我意识到了check-if-an-array-contains-any-element-of-another-array-in-javascript的主题,但是它并没有回答我的问题,因为我想使用includes来检查数组是否具有完全相同的元素,而不仅仅是某些元素。 / p>

此外,此问题how-to-compare-arrays-in-javascript不能解释为什么includes不起作用。它告诉如何做到这一点,这不是我的问题的重点。

2 个答案:

答案 0 :(得分:5)

因为[1, 2] === [1, 2]为假。即使它们具有相同的内容,不同的数组也不相等。 (所有对象都是如此。)

答案 1 :(得分:2)

当数组的值是“原始类型”时,可以使用include,但不能用于整个数组。

使用include时,它将检查数组的当前元素是否为作为参数传递的元素的===

在您的情况下,它将检查[1,2] === [1,2]是否产生错误,这是因为通过===比较器,您只是在检查应用于数组的内存引用。

如果您想做一些比较(例如比较整个数组是否相同),最好使用lodash中的_. isEqual之类的函数或实现自己的比较器函数。