我需要找到所有值都相等的数组。最快的方法是什么?我应该循环遍历它,然后比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
我需要找到所有值都相等的数组。最快的方法是什么?我应该循环遍历它,然后比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
当前回答
arr.length && arr.reduce(function(a, b){return (a === b)?a:false;}) === arr[0];
其他回答
您可以将数组转换为Set并检查其大小
对于基元数组条目,即number, string:
const isArrayWithEqualEntries = array => new Set(array).size === 1
如果对象数组中有一些字段需要测试是否等价,则输入id:
const mapper = ({id}) => id
const isArrayWithEqualEntries = array => new Set(array.map(mapper)).size === 1
var listTrue = ['a', 'a', 'a', 'a'];
var listFalse = ['a', 'a', 'a', 'ab'];
function areWeTheSame(list) {
var sample = list[0];
return !(list.some(function(item) {
return !(item == sample);
}));
}
现在您可以使用集合轻松地做到这一点。
Let a= ['a', 'a', 'a', 'a'];/ /正确的 Let b =['a', 'a', 'b', 'a'] console.log(新组(a)。Size === 1); console.log(新组(b)。Size === 1);
each()函数检查数组中的所有元素
const checkArr = a => a.every( val => val === a[0] )
checkArr(['a','a','a']) // true
是的,你也可以使用过滤器检查它,如下所示,非常简单,检查每个值都与第一个相同:
//ES6
function sameValues(arr) {
return arr.filter((v,i,a)=>v===a[0]).length === arr.length;
}
也可以使用数组上的每个方法:
//ES6
function sameValues(arr) {
return arr.every((v,i,a)=>v===a[0]);
}
你可以像下面这样检查你的数组:
sameValues(['a', 'a', 'a', 'a']); // true
sameValues(['a', 'a', 'b', 'a']); // false
或者,如果你经常重用它,你可以将它添加到JavaScript的原生数组功能中:
//ES6
Array.prototype.sameValues = Array.prototype.sameValues || function(){
this.every((v,i,a)=>v===a[0]);
}
你可以像下面这样检查你的数组:
['a', 'a', 'a', 'a'].sameValues(); // true
['a', 'a', 'b', 'a'].sameValues(); // false