我需要找到所有值都相等的数组。最快的方法是什么?我应该循环遍历它,然后比较值吗?

['a', 'a', 'a', 'a'] // true
['a', 'a', 'b', 'a'] // false

当前回答

您可以将数组转换为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

其他回答

你可以使用数组。每个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;

同样适用。

在JavaScript 1.6中,你可以使用Array.every:

function AllTheSame(array) {
    var first = array[0];
    return array.every(function(element) {
        return element === first;
    });
}

你可能需要一些完整性检查,例如当数组没有元素时。(此外,当所有元素都是NaN时,这将不起作用,因为NaN !== NaN,但这应该不是问题……对吗?)

这可能会起作用,你也可以使用注释代码,这也适用于给定的场景。

函数isUniform () { var arrayToMatch = [1,1,1,1,1]; var temp = arrayToMatch[0]; console.log(临时); /*返回arrayToMatch.every(函数(检查){ 返回检查== temp; }); * / var bool; arrayToMatch.forEach(函数(检查){ Bool =(check == temp); }) console.log (bool); } isUniform ();

它的简单。 创建一个函数并传递一个参数。 在该函数中,将第一个索引复制到一个新变量中。 然后创建一个for循环,循环遍历数组。 在循环中,创建一个while循环,检查新创建的变量是否等于循环中的所有元素。 如果它在for循环结束后返回true,则在while循环中返回false。

function isUniform(arra){
    var k=arra[0];
    for (var i = 0; i < arra.length; i++) {
        while(k!==arra[i]){
            return false;
        }
    }
    return true;
}

我喜欢的另一个很酷的解决方案是使用异或运算符:

console.log([5,5,5,5].reduce((a,b)=>a^b) == 0)
>> true
console.log([5,5,5,4].reduce((a,b)=>a^b) == 0)
>> false