Как заставить эту функцию проверять, совпадают ли элементы в массиве (table1)? Работает с числами, но не со строками - PullRequest
0 голосов
/ 16 апреля 2019

Функция проверяет, совпадают ли элементы в массиве

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

edit: спасибо всем за помощь!

Ответы [ 5 ]

1 голос
/ 16 апреля 2019

Вы можете просто проверить первый элемент друг с другом.

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']));
1 голос
/ 16 апреля 2019

вы проверяете элемент с индексом 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'. Если вы объясните, каковы другие требования к функции, вы получите лучшее решение.

0 голосов
/ 16 апреля 2019

Вы можете использовать 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))
0 голосов
/ 16 апреля 2019
function isUniform (table) {
  var first = table.shift();
  return !table.find((item) => {
    return item !== first;
  });
}

var table = ["a", "b", "a", "a"];
isUniform(table);
0 голосов
/ 16 апреля 2019

Вы можете упростить код, используя Set . Из документов

Объект Set позволяет хранить уникальные значения любого типа, будь то примитивные значения или ссылки на объекты.

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

console.log(isUniform());
...