Szybkie sprawdzenie elementów tablicy

0

Cześć, mam 30 elementową tablicę, zależy mi na tym, żeby sprawdzić, czy wszystkie elementy tablicy są albo typem true, albo typem false, albo pomieszane oba typy. Mam parę pomysłów jakby to zrobić, ale może macie na myśli coś w miarę szybkiego, żeby nie robić pętli na pętli

0

Co rozumiesz przez 'pomieszane oba typy'? true/false/true/false na przemian?

2
tab.every(e => typeof e === "boolean");
0
Vincent_zyx napisał(a):

Co rozumiesz przez 'pomieszane oba typy'? true/false/true/false na przemian?

pomieszane, czyli w tablicy znajdują się wartości true i false w różnej kolejności

Markuz napisał(a):
tab.every(e => typeof e === "boolean");

Nie rozumiem troche tego zapisu, mógłbyś wyjaśnić?

Markuz napisał(a):
tab.every(e => typeof e === "boolean");

I to chyba nie do końca spełnia warunki tego co napisałem, chcę sprawdzić, czy tablica ma tylko wartości true, albo tylko false, albo mieszane

0

Coś ostro pomieszałeś, true/false to stan typu boolean.
Musisz napisać pętle która sprawdza elementy i jeżeli któryś z nich nie jest booleanem to zwracasz false jak nie to po wyjściu z pętli zwracasz true;

1
  1. True i False to nie są typy tylko wartości. Typem jest Boolean.
  2. Co tak dokładnie chcesz uzyskać? Np. mamy same True => zwraca 1, mamy same False => zwraca 0, mamy true i false => zwraca -1? A co, jeżeli mamy wartość innego typu niż Boolean?
0

Pokaż proszę przykład tablicy która ma wartości true, wartości false i wartości mieszane.

Żeby zrozumieć powyższy zapis przeczytaj to:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

A najlepiej daj input i output dla każdego przypadku z którym masz problem.

2

Trzy przykładowe rozwiązania, w kolejności od imo najczytelniejszego:

const solution1 = (arr) => {
  if (arr.every(item => item === true)) {
    return 'ALL_TRUE'
  }
  
  if (arr.every(item => item === false)) {
    return 'ALL_FALSE'
  }
  
  return 'MIXED'
}

const solution2 = (arr) => {
  if (arr.every(item => item === true)) {
    return 'ALL_TRUE'
  }
  
  if (arr.some(item => item === true)) {
    return 'MIXED'
  }
  
  return 'ALL_FALSE'
}

const solution3 = (arr) => {
  const first = arr[0]
  
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] !== first) {
      return 'MIXED'
    }
  }
  
  return first === true ? 'ALL_TRUE' : 'ALL_FALSE'
}

Wszystkie przykłady mają podobną złożoność obliczeniową.

1 użytkowników online, w tym zalogowanych: 0, gości: 1