JavaScript 如何检查两个数组值是否相等
简介:
假设你有两个 Javascript数组 ,每个数组都有一些元素。现在你想要比较这两个数组。要比较两个数组,你必须确定它们是否具有相同数量的元素,并且这些元素是否具有相同的值。如果满足这两个条件,我们称两个数组相等。然而,比较两个数组并不像看起来那么简单。让我们来研究一下各种选项。
等值比较
Javascript 使用引用而不是值来比较对象和数组。这意味着Javascript检查两个数组是否指向相同的引用,而不是比较它们中存在的值,即使这两个数组包含相同的组件也通常不是这种情况。这意味着使用严格或非严格等值运算符(即==
或===
)来比较JavaScript中的两个数组通常会得到 false 的结果。让我们使用一个示例来更好地了解这个:
示例:
const a = [1, 2, 3];
const b = [1, 2, 3];
if (a === b)
console.log("The arrays have the same elements.")
else
console.log("The arrays have different elements.")
输出:
The arrays have different elements.
尽管上面的示例中两个数组的值都是相同的,但是如您所见,比较的结果是 false 。但是,您可以使用这个函数来查看对象或数组中的两个指针是否指向同一个元素。让我们使用一个图例来更好地理解这个问题:
const a = [1, 2, 3];
const b = [1, 2, 3];
const c = a;
if (a === c)
console.log("The arrays have the same elements.")
else
console.log("The arrays have different elements.")
输出:
The arrays have the same elements.
使用JSON.stringify()进行数组比较
JSON.stringify ()是JavaScript中经常用来比较两个数组的另一种方法。JavaScript的 JSON.stringify 方法将一个对象或数组转换为JSON字符串。这个函数允许我们对每个数组进行 序列化 ,之后我们可以比较这两个序列化的字符串。让我们试图理解如何将这个方法应用到实践中:
示例:
const equalsCheck = (a, b) => {
return JSON.stringify(a) === JSON.stringify(b);
}
const a = [1, 2, 3];
const b = [1, 2, 3];
if (equalsCheck(a, b))
console.log("The arrays have the same elements.");
else
console.log("The arrays have different elements.");
输出:
The arrays have the same elements.
为了证明这一点,请考虑以下示例。然而,在某些边缘情况下,这个解决方案会失败。
const equalsCheck = (a, b) => {
return JSON.stringify(a) === JSON.stringify(b);
}
const a = [null, 2, 3];
const b = [undefined, 2, 3];
if (equalsCheck(a, b))
console.log("The arrays have the same elements.");
else
console.log("The arrays have different elements.");
输出:
The arrays have the same elements.
在这个示例中,数组并不相等,但被证明它们是相等的。这些数组的各自的第一个项目的值在它们之间是不同的。然而,当将数组转换为JSON字符串时, JSON.stringify() 方法不考虑 undefined 或 null 的值。因此,它只是将它们忽略掉,这就是为什么字符串最后变成相等的原因。这种情况可能看起来非常异常,但它可能会使问题更难解决。
使用Array.every()方法进行数组比较
Array.every() 方法测试是否所有数组中的元素都通过提供的函数实现的测试。如果对所有元素函数返回true,那么 every() 返回 true 。否则,它返回 false 。
下面是一个检查两个数组是否具有相等值的示例:
示例:
const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
const equalValues = (array1.length === array2.length) && array1.every((value, index) => value === array2[index]);
if (equalValues) {
console.log("The arrays have equal values.");
} else {
console.log("The arrays do not have equal values.");
}
输出:
The arrays have equal values.
在这个示例中,使用 every() 方法来检查 array1 中的所有值是否等于 array2 中对应的值。如果任何一个值不相等, every() 方法将返回false,这些数组将被认为具有不同的值。
结论
在Javascript中,比较两个数组涉及确定每个数组是否具有相同数量的元素以及所有这些元素是否具有相同的值。
这些方法包括:
- 使用
==
或===
运算符进行相等比较。 - 使用 JSON.stringify() 将数组转换为JSON字符串,然后进行比较。
- 使用 Array.every() 方法进行数组比较。