如何使这个函数检查数组(table1)中的元素是否相同?它适用于数字而不是字符串

问题描述 投票:0回答:5

函数检查数组中的元素是否相同

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

编辑:感谢大家的帮助!

javascript arrays string typeof
5个回答
1
投票

你正在检查索引y-1的元素是否大于0。您应检查该索引处的索引not元素。

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']))

Using Set()

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

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

Using every()

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

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

注意:这样的函数通常接受一个参数,然后根据该输入返回。你不应该声明一个本地数组,然后只测试它。

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


1
投票

您可以只检查每个项目的第一项。

function isUniform(array) {
    var i,
        first = array[0];
 
    for (i = 1; i < array.length; i++) {
        if (first !== array[i]) return false;
    }

    return true;
}

console.log(isUniform(['a', 'b', 'a', 'a']));

0
投票

您可以使用Set简化代码。来自docs,

Set对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。

function isUniform() {
  var table = ['a', 'b', 'a', 'a'];
  return new Set(table).size === 1;
}

console.log(isUniform());

0
投票
function isUniform (table) {
  var first = table.shift();
  return !table.find((item) => {
    return item !== first;
  });
}

var table = ["a", "b", "a", "a"];
isUniform(table);

0
投票

你可以使用table.every( item => item === table[0] )

function isUniform(table){
 return table.every( item => item === table[0] )
 //return test;
}


var table1 = ['a','b','a','a'];
console.log(isUniform(table1))
© www.soinside.com 2019 - 2024. All rights reserved.