我需要找到所有值都相等的数组。最快的方法是什么?我应该循环遍历它,然后比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
我需要找到所有值都相等的数组。最快的方法是什么?我应该循环遍历它,然后比较值吗?
['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false
当前回答
现在您可以使用集合轻松地做到这一点。
Let a= ['a', 'a', 'a', 'a'];/ /正确的 Let b =['a', 'a', 'b', 'a'] console.log(新组(a)。Size === 1); console.log(新组(b)。Size === 1);
其他回答
您可以将数组转换为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
你可以计算数组中不同值的数量,如果这个值是1,所有的条目都是相同的。
例子:
array = np.array([1, 2, 2, 3, 3])
set(array) # this gives the different values present in the array (1,2,3)
len(set(array)) # this returns 3, 3 different values in the array
你可以使用数组。每个if支持:
var equals = array.every(function(value, index, array){
return value === array[0];
});
循环的替代方法可以是类似sort的东西
var temp = array.slice(0).sort();
var equals = temp[0] === temp[temp.length - 1];
或者,如果项目像问题,一些肮脏的东西,比如:
var equals = array.join('').split(array[0]).join('').length === 0;
同样适用。
我认为最简单的方法是创建一个循环来比较每个值和下一个值。只要“链”中有断点,它就会返回false。如果第一个元素等于第二个元素,第二个元素等于第三个元素,以此类推,那么我们可以得出这样的结论:数组中的所有元素彼此相等。
给定一个数组data[],那么你可以使用:
for(x=0;x<data.length - 1;x++){
if (data[x] != data[x+1]){
isEqual = false;
}
}
alert("All elements are equal is " + isEqual);
在JavaScript 1.6中,你可以使用Array.every:
function AllTheSame(array) {
var first = array[0];
return array.every(function(element) {
return element === first;
});
}
你可能需要一些完整性检查,例如当数组没有元素时。(此外,当所有元素都是NaN时,这将不起作用,因为NaN !== NaN,但这应该不是问题……对吗?)