检查数组中的所有值是否相等
Check if all Values in Array are Equal in JavaScript
检查数组中的所有值是否相等:
- 使用该
Array.every()
方法遍历数组。 - 检查每个数组元素是否等于第一个元素。
- 如果所有数组元素都相等,该
every()
方法将返回。true
const arr1 = [1, 1, 1]; const arr2 = [1, 1, 2]; function allAreEqual(array) { const result = array.every(element => { if (element === array[0]) { return true; } }); return result; } console.log(allAreEqual(arr1)); // 👉️ true console.log(allAreEqual(arr2)); // 👉️ false if (allAreEqual(arr1)) { // 👇️ this runs console.log('All elements in the array are equal'); } else { console.log('Not all elements in the array are equal'); }
我们传递给
Array.every()
方法的函数会针对数组中的每个元素进行调用,直到它返回一个虚假值或遍历整个数组。
every()
方法将短路并返回false
。在每次迭代中,我们检查当前元素是否等于 position 处的元素0
。如果所有元素都满足条件,则它们都相等。
Array.every()
空数组上调用该方法时,它会true
针对任何条件返回。const arr1 = []; function allAreEqual(array) { const result = array.every(element => { if (element === array[0]) { return true; } }); return result; } console.log(allAreEqual(arr1)); // 👉️ true
如果你考虑一个所有值都相等的空数组,你不需要做任何事情。
但是,如果您考虑一个并非所有元素都相等的空数组,请使用以下解决方案。
const arr1 = []; const arr2 = [1, 1, 1]; function allAreEqual(array) { if (array.length > 0) { const result = array.every(element => { if (element === array[0]) { return true; } }); return result; } return false; } console.log(allAreEqual(arr1)); // 👉️ false console.log(allAreEqual(arr2)); // 👉️ true
every()
这完全是特定于用例的。例如,您可能想要检查数组是否至少有 2 个元素true
要从函数返回。
另一种方法是使用
Set 对象。
使用 Set 对象检查数组中的所有值是否相等
检查数组中的所有值是否相等:
- 将数组传递给
Set()
构造函数并访问该size
属性。 - 该
Set
对象仅存储唯一值。 - 如果 的
Set
长度为1
,则所有数组元素都相等或数组仅包含 1 个元素。
const arr1 = [1, 1, 1]; const arr2 = [1, 1, 2]; function allAreEqual(array) { const result = new Set(array).size === 1; return result; } console.log(allAreEqual(arr1)); // 👉️ true console.log(allAreEqual(arr2)); // 👉️ false
该Set
对象允许我们存储唯一值并自动删除所有重复值。
如果我们多次向它传递一个包含相同值的数组,它只会被添加一次到Set
.
console.log(new Set([1, 1, 1])); // 👉️ { 1 }
的size
属性Set
允许我们获取存储在 中的值的数量Set
。
Set
等于1
,则数组中的所有值都相等,或者数组只包含一个元素。如果只想true
在数组至少包含2
元素时返回,请添加以下if
语句。
const arr1 = [1]; const arr2 = [1, 1, 1]; function allAreEqual(array) { if (array.length > 1) { const result = new Set(array).size === 1; return result; } else { return false; } } console.log(allAreEqual(arr1)); // 👉️ false console.log(allAreEqual(arr2)); // 👉️ true
我们首先确保数组包含超过 1 个元素。
如果是,我们将数组传递给Set
构造函数。
在所有其他情况下,我们返回false
。
您还可以使用for...of
循环来检查数组中的所有元素是否相等。
for...of
使用循环检查数组中的所有值是否相等
检查数组中的所有值是否相等:
- 使用
for...of
循环遍历数组。 - 检查每个元素是否不等于第一个数组元素。
- 如果满足条件,则将布尔变量设置为
false
并退出循环。
function allAreEqual(array) { let areEqual = true; for (const element of array) { if (element !== array[0]) { areEqual = false; break; } } return areEqual; } const arr = [0, 0, 0]; const arr1 = [1, 1, 2]; const arr2 = [1, 1, 1]; console.log(allAreEqual(arr)); // 👉️ true console.log(allAreEqual(arr1)); // 👉️ false console.log(allAreEqual(arr2)); // 👉️ true
for…of
语句用于循环遍历可迭代对象,如数组、字符串
Map
、
Set
和NodeList
对象generators
。
在每次迭代中,我们检查当前元素是否不等于第一个数组元素。
areEqual
变量设置为并跳出循环。 false
该for...of
循环非常高效,因为一旦找到不等于其他数组元素的值,它就不会进行不必要的迭代。
您还可以使用基本for
循环来检查数组中的所有元素是否相等。
for
使用循环检查数组中的所有值是否相等
检查数组中的所有值是否相等:
- 使用
for
循环遍历数组。 - 在每次迭代中,检查当前元素是否不等于第一个数组元素。
- 如果从未满足条件,则所有数组元素都相等。
function allAreEqual(array) { let areEqual = true; for (let index = 0; index < array.length; index++) { if (array[index] !== array[0]) { areEqual = false; break; } } return areEqual; } const arr = [0, 0, 0]; const arr1 = [1, 1, 2]; const arr2 = [1, 1, 1]; console.log(allAreEqual(arr)); // 👉️ true console.log(allAreEqual(arr1)); // 👉️ false console.log(allAreEqual(arr2)); // 👉️ true
我们使用了一个基本for
循环来遍历数组。
在每次迭代中,我们检查当前索引处的元素是否不等于第一个数组元素。
如果满足条件,我们将areEqual
变量设置为false
并使用
break
语句跳出loop
.
您还可以使用该Array.filter()
方法检查数组中的所有值是否相等。
使用#检查数组中的所有值是否相等Array.filter()
检查数组中的所有值是否相等:
- 使用该
Array.filter()
方法遍历数组。 - 检查每个数组元素是否等于第一个数组元素。
- 检查新数组的长度是否等于原始数组的长度。
function allAreEqual(array) { return ( array.filter(element => { return element === array[0]; }).length === array.length ); } const arr = [0, 0, 0]; const arr1 = [1, 1, 2]; const arr2 = [1, 1, 1]; console.log(allAreEqual(arr)); // 👉️ true console.log(allAreEqual(arr1)); // 👉️ false console.log(allAreEqual(arr2)); // 👉️ true
我们传递给
Array.filter()
方法的函数会针对数组中的每个元素进行调用。
在每次迭代中,我们检查当前元素是否等于第一个数组元素。
filter()
方法返回一个新数组,其中包含回调函数返回的值true
。如果新数组的长度等于原数组的长度,则所有数组元素都相等。
请注意,这种方法不是很有效,因为即使找到不匹配的值,您也必须继续遍历数组。
您选择哪种方法是个人喜好的问题。我会使用
Array.every()
方法或Set()
构造函数,因为它们非常高效且易于阅读。