函数检查数组中的元素是否相同
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
。您应检查该索引处的索引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']))
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'
的原因。如果您要解释功能的其他要求,您将获得更好的解决方案。
您可以只检查每个项目的第一项。
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']));
您可以使用Set简化代码。来自docs,
Set对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。
function isUniform() {
var table = ['a', 'b', 'a', 'a'];
return new Set(table).size === 1;
}
console.log(isUniform());
function isUniform (table) {
var first = table.shift();
return !table.find((item) => {
return item !== first;
});
}
var table = ["a", "b", "a", "a"];
isUniform(table);
你可以使用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))