函数正在检查数组内的元素是否相同

function isUniform(){
var table1 = ['a','b','a','a'];
for(var y = table1.length - 1; y>=0; y--){
    if( (typeof table1 === 'string' && table1[y] !== table1[y - 1]) || (typeof table1 !== 'string' && table1[y] !== table1[y - 1] && table1[y - 1] >0) ){
        return false;
    }
}
return true;}


它应该返回false

编辑:谢谢大家的帮助!

最佳答案

您正在检查索引y-1处的元素大于0。您应该检查索引,而不是该索引处的元素。



function isUniform(table1){
  for(var y = table1.length - 1; y>=0; y--){
    if( (typeof table1 === 'string' && table1[y] !== table1[y -   1]) || (typeof table1 !== 'string' && table1[y] !== table1[y  - 1] && y - 1 > 0) ){
        return false;
    }
  }
return true;
}
console.log(isUniform(['a','b','a','a']))





使用Set()

一种更简单的方法是使用Set()



const allEqual = arr => new Set(arr).size === 1
console.log(allEqual(['a','b','a','a']))





使用every()

您也可以使用every()并将每个元素与第一个元素进行比较。



const allEqual = arr => arr.every(x => arr[0] === x);
console.log(allEqual(['a','b','a','a']))





注意:像这样的函数通常需要一个参数,然后根据该输入返回。您不应声明局部数组,而只能对其进行测试。

其次,我无法理解typeof table1 === 'string'的原因。如果您要解释功能的其他要求,您将获得更好的解决方案。

08-25 14:18
查看更多