我需要找到所有值都相等的数组。执行此操作的最快方法是什么?我应该遍历它并只比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
我需要找到所有值都相等的数组。执行此操作的最快方法是什么?我应该遍历它并只比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
const allEqual = arr => arr.every( v => v === arr[0] )
allEqual( [1,1,1,1] ) // true
或单线:
[1,1,1,1].every( (val, i, arr) => val === arr[0] ) // true
Array.prototype.every(来自MDN):该every()
方法测试数组中的所有元素是否通过提供的函数实现的测试。
编辑:成为红色忍者:
!!array.reduce(function(a, b){ return (a === b) ? a : NaN; });
结果:
var array = ["a", "a", "a"] => result: "true"
var array = ["a", "b", "a"] => result: "false"
var array = ["false", ""] => result: "false"
var array = ["false", false] => result: "false"
var array = ["false", "false"] => result: "true"
var array = [NaN, NaN] => result: "false"
警告:
var array = [] => result: TypeError thrown
这是因为我们没有传递一个initialValue。所以,你不妨先检查一下array.length
。
这有效。您可以使用原型在 Array 上创建一个方法。
if (Array.prototype.allValuesSame === undefined) {
Array.prototype.allValuesSame = function() {
for (let i = 1; i < this.length; i++) {
if (this[i] !== this[0]) {
return false;
}
}
return true;
}
}
以这种方式调用它:
let a = ['a', 'a', 'a'];
let b = a.allValuesSame(); // true
a = ['a', 'b', 'a'];
b = a.allValuesSame(); // false
您可以将 Array 转换为 Set。如果 Set 的大小等于 1,则 Array 的所有元素都相等。
function allEqual(arr) {
return new Set(arr).size == 1;
}
allEqual(['a', 'a', 'a', 'a']); // true
allEqual(['a', 'a', 'b', 'a']); // false
在 JavaScript 1.6 中,您可以使用Array.every
:
function AllTheSame(array) {
var first = array[0];
return array.every(function(element) {
return element === first;
});
}
您可能需要进行一些完整性检查,例如当数组没有元素时。(此外,当所有元素都为NaN
after时,这将不起作用NaN !== NaN
,但这应该不是问题......对吗?)